From 3d68bfa4a433e49d9e04b7caff13131294b3ec71 Mon Sep 17 00:00:00 2001 From: Benjamin Date: Fri, 2 Oct 2026 20:53:30 +0200 Subject: [PATCH 1/2] feat: add `lapack/base/dsyconvf-rook` Add complete JavaScript and native factor-storage conversion and reversion under accepted LAPACK RFC #2464. Preserve signed rook pivots, validate indexed buffers before writes, and retain Reference-LAPACK provenance. AI-assisted implementation, tests, documentation and independent automated review by OpenAI Codex; no applicant manual review is claimed. --- .../@stdlib/lapack/base/dsyconvf-rook/NOTICE | 52 + .../lapack/base/dsyconvf-rook/README.md | 402 ++ .../base/dsyconvf-rook/benchmark/benchmark.js | 135 + .../benchmark/benchmark.ndarray.js | 135 + .../base/dsyconvf-rook/benchmark/c/Makefile | 146 + .../dsyconvf-rook/benchmark/c/benchmark.c | 164 + .../lapack/base/dsyconvf-rook/binding.gyp | 265 + .../lapack/base/dsyconvf-rook/docs/repl.txt | 150 + .../base/dsyconvf-rook/docs/types/index.d.ts | 159 + .../base/dsyconvf-rook/docs/types/test.ts | 90 + .../base/dsyconvf-rook/examples/c/Makefile | 146 + .../base/dsyconvf-rook/examples/c/example.c | 49 + .../base/dsyconvf-rook/examples/index.js | 52 + .../lapack/base/dsyconvf-rook/include.gypi | 70 + .../stdlib/lapack/base/dsyconvf_rook.h | 66 + .../lapack/base/dsyconvf-rook/lib/base.js | 181 + .../base/dsyconvf-rook/lib/can_use_native.js | 76 + .../lapack/base/dsyconvf-rook/lib/factory.js | 132 + .../lapack/base/dsyconvf-rook/lib/index.js | 34 + .../lapack/base/dsyconvf-rook/lib/main.js | 26 + .../lapack/base/dsyconvf-rook/lib/native.js | 42 + .../lapack/base/dsyconvf-rook/lib/validate.js | 218 + .../lapack/base/dsyconvf-rook/manifest.json | 89 + .../lapack/base/dsyconvf-rook/package.json | 81 + .../lapack/base/dsyconvf-rook/src/Makefile | 70 + .../lapack/base/dsyconvf-rook/src/addon.c | 228 + .../base/dsyconvf-rook/src/dsyconvf_rook.c | 79 + .../dsyconvf-rook/src/dsyconvf_rook_ndarray.c | 247 + .../base/dsyconvf-rook/src/validation.h | 301 + .../lapack/base/dsyconvf-rook/test/common.js | 256 + .../dsyconvf-rook/test/fixtures/lapack.json | 5492 +++++++++++++++++ .../lapack/base/dsyconvf-rook/test/test.js | 243 + .../base/dsyconvf-rook/test/test.native.js | 280 + 33 files changed, 10156 insertions(+) create mode 100644 lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/NOTICE create mode 100644 lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/README.md create mode 100644 lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/benchmark/benchmark.js create mode 100644 lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/benchmark/benchmark.ndarray.js create mode 100644 lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/benchmark/c/Makefile create mode 100644 lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/benchmark/c/benchmark.c create mode 100644 lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/binding.gyp create mode 100644 lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/docs/repl.txt create mode 100644 lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/docs/types/index.d.ts create mode 100644 lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/docs/types/test.ts create mode 100644 lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/examples/c/Makefile create mode 100644 lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/examples/c/example.c create mode 100644 lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/examples/index.js create mode 100644 lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/include.gypi create mode 100644 lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/include/stdlib/lapack/base/dsyconvf_rook.h create mode 100644 lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/lib/base.js create mode 100644 lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/lib/can_use_native.js create mode 100644 lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/lib/factory.js create mode 100644 lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/lib/index.js create mode 100644 lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/lib/main.js create mode 100644 lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/lib/native.js create mode 100644 lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/lib/validate.js create mode 100644 lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/manifest.json create mode 100644 lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/package.json create mode 100644 lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/src/Makefile create mode 100644 lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/src/addon.c create mode 100644 lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/src/dsyconvf_rook.c create mode 100644 lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/src/dsyconvf_rook_ndarray.c create mode 100644 lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/src/validation.h create mode 100644 lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/test/common.js create mode 100644 lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/test/fixtures/lapack.json create mode 100644 lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/test/test.js create mode 100644 lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/test/test.native.js diff --git a/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/NOTICE b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/NOTICE new file mode 100644 index 000000000000..1ff5cb1e7591 --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/NOTICE @@ -0,0 +1,52 @@ +Derived from Reference-LAPACK DSYCONVF_ROOK at commit +2e5d9c1273435fbd953adb294ed603e4789afaba (SRC/dsyconvf_rook.f). +The JavaScript and C storage algorithms retain the following BSD terms. + +Copyright (c) 1992-2025 The University of Tennessee and The University + of Tennessee Research Foundation. All rights + reserved. +Copyright (c) 2000-2025 The University of California Berkeley. All + rights reserved. +Copyright (c) 2006-2025 The University of Colorado Denver. All rights + reserved. + +$COPYRIGHT$ + +Additional copyrights may follow + +$HEADER$ + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +- Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +- Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer listed + in this license in the documentation and/or other materials + provided with the distribution. + +- Neither the name of the copyright holders nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +The copyright holders provide no reassurances that the source code +provided does not infringe any patent, copyright, or any other +intellectual property rights of third parties. The copyright holders +disclaim any liability to any recipient for claims brought against +recipient by any third party for infringement of that parties +intellectual property rights. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/README.md b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/README.md new file mode 100644 index 000000000000..a93e42d752ff --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/README.md @@ -0,0 +1,402 @@ + + +# dsyconvfRook + +> Convert or revert symmetric indefinite rook-factor storage. + +
+ +The routine converts the selected triangle of an existing symmetric indefinite rook factorization between the storage used by `DSYTRF_ROOK` and the separated block-diagonal storage used by `DSYTRF_RK`. Conversion extracts the off-diagonal elements of 2-by-2 diagonal blocks into `E`, zeros their matrix entries, and applies the recorded row interchanges. Reversion reverses the interchanges and restores those matrix entries from `E`. + +The routine changes storage; it does not compute a factorization, complete the unstored triangle, or test whether the factors are mathematically valid. + +
+ + + +
+ +## Usage + +```javascript +var dsyconvfRook = require( '@stdlib/lapack/base/dsyconvf-rook' ); +``` + +#### dsyconvfRook( order, uplo, way, N, A, LDA, E, IPIV ) + +Converts or reverts rook-factor storage in place and returns `0` on success. + +```javascript +var Float64Array = require( '@stdlib/array/float64' ); +var Int32Array = require( '@stdlib/array/int32' ); + +// An upper-triangular 2x2 factor; 999 guards the other triangle: +var A = new Float64Array( [ 0.0, 2.0, 999.0, 0.0 ] ); +var E = new Float64Array( 2 ); + +// The distinct negative pivots retain the LAPACK sign and 1-based targets: +var IPIV = new Int32Array( [ -1, -2 ] ); + +var info = dsyconvfRook( 'row-major', 'upper', 'convert', 2, A, 2, E, IPIV ); +// returns 0 +// A => [ 0.0, 0.0, 999.0, 0.0 ] +// E => [ 0.0, 2.0 ] +// IPIV => [ -1, -2 ] + +info = dsyconvfRook( 'row-major', 'upper', 'revert', 2, A, 2, E, IPIV ); +// returns 0 +// A => [ 0.0, 2.0, 999.0, 0.0 ] +// E => [ 0.0, 2.0 ] +``` + +The function has the following parameters: + +- **order**: storage layout, either `'row-major'` or `'column-major'`. +- **uplo**: stored triangle, either `'upper'` or `'lower'`. +- **way**: either `'convert'` or `'revert'`. +- **N**: nonnegative safe integer matrix order, at most `2147483647`. +- **A**: input/output `Float64Array` containing the full leading `N`-by-`N` matrix view. Only the stored triangle is modified. +- **LDA**: leading dimension, a safe integer at least `max(1,N)`. Matrix entry `(i,j)` is `A[i*LDA+j]` in row-major order and `A[i+j*LDA]` in column-major order. +- **E**: `Float64Array` with `N` indexed elements. Conversion writes the off-diagonal block values; reversion reads them and leaves `E` unchanged. +- **IPIV**: read-only `Int32Array` with `N` indexed, unchanged signed **1-based** LAPACK rook pivots. + +Indexing starts at each typed-array view's first element. Typed-array views can introduce byte offsets; the function honors those offsets. + + + +#### dsyconvfRook.ndarray( uplo, way, N, A, strideA1, strideA2, offsetA, E, strideE, offsetE, IPIV, strideIPIV, offsetIPIV ) + +Converts or reverts factor storage using explicit element strides and offsets and returns `0` on success. + +```javascript +var Float64Array = require( '@stdlib/array/float64' ); +var Int32Array = require( '@stdlib/array/int32' ); + +var A = new Float64Array( [ 7.0, 0.0, 2.0, 999.0, 0.0, 7.0 ] ); +var E = new Float64Array( [ 8.0, 0.0, 0.0, 8.0 ] ); +var IPIV = new Int32Array( [ 9, -1, -2, 9 ] ); + +var info = dsyconvfRook.ndarray( 'upper', 'convert', 2, A, 2, 1, 1, E, 1, 1, IPIV, 1, 1 ); +// returns 0 +// A => [ 7.0, 0.0, 0.0, 999.0, 0.0, 7.0 ] +// E => [ 8.0, 0.0, 2.0, 8.0 ] +// IPIV => [ 9, -1, -2, 9 ] +``` + +The additional parameters have the following meanings: + +- **strideA1**: matrix row stride. +- **strideA2**: matrix column stride. +- **offsetA**: starting index for `A`. +- **strideE**: stride for `E`. +- **offsetE**: starting index for `E`. +- **strideIPIV**: stride for `IPIV`. +- **offsetIPIV**: starting index for `IPIV`. + +All strides and offsets are in elements, relative to their respective typed-array views. The function indexes matrix entry `(i,j)` as `A[offsetA+i*strideA1+j*strideA2]`, vector element `i` as `E[offsetE+i*strideE]`, and pivot element `i` as `IPIV[offsetIPIV+i*strideIPIV]`. Positive and negative independent strides are supported. + +
+ + + +
+ +## Notes + +- **Pivot encoding is signed and 1-based.** A positive pivot `p` identifies row `p-1`. Adjacent negative pivots identify a 2-by-2 block; each identifies row `abs(p)-1`. The pair values can differ and must remain unchanged. In particular, `-1` retains both the first-row target and its negative block marker. This package does not use the unsigned zero-based pivot convention of `dlaswp` or `dgttrf`. +- Every pivot must be nonzero and in `[-N,N]`. Upper storage is parsed from row `N` downward: positive targets cannot exceed the current row, and both targets in a negative pair cannot exceed its second row. Lower storage is parsed upward: positive targets cannot precede the current row, and both targets in a negative pair cannot precede its first row. Incomplete or mixed-sign negative pairs are rejected before routine-owned writes. +- For upper storage, conversion copies each 2-by-2 block's `A(i-1,i)` to `E(i)`; `E(0)` and non-block entries become positive zero. For lower storage, it copies `A(i+1,i)` to `E(i)`; `E(N-1)` and non-block entries become positive zero. Extraction precedes the row interchanges; reversion reverses the interchanges before restoration. +- The diagonal, opposite triangle, padding, and `IPIV` are preserved in both directions. Reversion preserves all `E` entries. +- For `N>0`, the actual backing stores of `A`, `E`, and `IPIV` must be ordinary `ArrayBuffer` objects. Views backed by `SharedArrayBuffer` are rejected with a `TypeError` before routine-owned writes, including views of shared buffers returned by `structuredClone`. A shadowed `.buffer` property does not change this requirement. +- All active metadata and index arithmetic must use exact safe integers. The full leading `N`-by-`N` matrix view must fit `A` and be injective. For `N>1`, `E` cannot have zero stride in either direction. Read-only `IPIV` may have zero stride if its repeated values form a valid complete pivot sequence. +- The full matrix view and the `N`-element `E` and `IPIV` views must have pairwise disjoint **indexed-byte envelopes**. The function rejects overlapping envelopes even when interleaved active slots do not coincide. Disjoint subviews of one ordinary `ArrayBuffer` are permitted. +- Distinct ordinary `ArrayBuffer` objects created by JavaScript own separate storage. The caller must not supply exotic `ArrayBuffer` objects whose physical storage is externally aliased by a foreign native addon; the JavaScript implementation cannot establish disjointness for those objects. The native bridge additionally rejects overlapping actual indexed-pointer byte envelopes, independently of JavaScript object identity. +- After validating the scalar selectors, `N`, and standard-interface `LDA`, `N=0` returns `0` without accessing the buffers or unused ndarray metadata. Invalid scalar arguments still fail for `N=0`; `LDA` must still be at least `1`. For `N=1`, conversion writes `E(0)=+0` and reversion preserves `E`. +- Invalid selectors and active buffer types throw a `TypeError`. Invalid dimensions, metadata, bounds, matrix collisions, byte-envelope aliasing, or pivots throw a `RangeError` before routine-owned writes. This guarantee does not exclude side effects from caller-defined getters or coercions. Concurrent external mutation is unsupported. +- An unavailable native addon or metadata outside its configured integer range uses the same validated JavaScript implementation. Rejected public preconditions remain errors. +- Values are copied or swapped; no universal JavaScript NaN-payload preservation or nonfinite-factorization guarantee is made. + +
+ + + +
+ +## Examples + + + +```javascript +var Float64Array = require( '@stdlib/array/float64' ); +var Int32Array = require( '@stdlib/array/int32' ); +var dsyconvfRook = require( '@stdlib/lapack/base/dsyconvf-rook' ); + +// Upper-triangular rook storage of a symmetric indefinite 2x2 block: +var A = new Float64Array( [ 0.0, 2.0, 999.0, 0.0 ] ); +var E = new Float64Array( [ -9.0, -9.0 ] ); + +// Keep the distinct negative LAPACK pivots unchanged and 1-based: +var IPIV = new Int32Array( [ -1, -2 ] ); + +var info = dsyconvfRook( 'row-major', 'upper', 'convert', 2, A, 2, E, IPIV ); +if ( info !== 0 || A[ 1 ] !== 0.0 || E[ 0 ] !== 0.0 || E[ 1 ] !== 2.0 ) { + throw new Error( 'Unexpected conversion result.' ); +} +console.log( 'Converted A: %s', A.join( ', ' ) ); +console.log( 'Extracted E: %s', E.join( ', ' ) ); + +// Reversion restores the off-diagonal value and preserves E and IPIV: +info = dsyconvfRook( 'row-major', 'upper', 'revert', 2, A, 2, E, IPIV ); +if ( + info !== 0 || + A[ 1 ] !== 2.0 || + A[ 2 ] !== 999.0 || + E[ 1 ] !== 2.0 || + IPIV[ 0 ] !== -1 || + IPIV[ 1 ] !== -2 +) { + throw new Error( 'Unexpected reversion result.' ); +} +console.log( 'Reverted A: %s', A.join( ', ' ) ); +console.log( 'Unchanged pivots: %s', IPIV.join( ', ' ) ); +``` + +
+ + + + + +* * * + +
+ +## C APIs + +
+ +The C interfaces use the same storage and unchanged signed 1-based pivot encoding. `LAPACK_INT` follows the configured LAPACK integer width. Calls use `API_SUFFIX` to honor optional API suffixing. + +
+ + + +
+ +### Usage + +```c +#include "stdlib/lapack/base/dsyconvf_rook.h" +``` + +#### c_dsyconvf_rook( layout, uplo, way, N, A, LDA, E, IPIV ) + +Converts or reverts factor storage. `layout` is `LAPACK_ROW_MAJOR` or `LAPACK_COL_MAJOR`; `uplo` is `LAPACK_UPPER_TRIANGLE` or `LAPACK_LOWER_TRIANGLE`; `way` is `'C'`/`'c'` for conversion or `'R'`/`'r'` for reversion. + +```c +LAPACK_INT API_SUFFIX(c_dsyconvf_rook)( LAPACK_LAYOUT layout, LAPACK_UPLO uplo, char way, LAPACK_INT N, double *A, LAPACK_INT LDA, double *E, const LAPACK_INT *IPIV ); +``` + +The function accepts the following arguments: + +- **layout**: matrix storage layout. +- **uplo**: stored matrix triangle. +- **way**: conversion or reversion selector. +- **N**: nonnegative matrix order. +- **A**: `[in,out] double*` factor storage. +- **LDA**: leading dimension, at least `max(1,N)`. +- **E**: `[out] double*` off-diagonal block values for conversion; `[in] double*` values for reversion. +- **IPIV**: `[in] const LAPACK_INT*` read-only, unchanged signed 1-based pivots. + +The function returns `0` on success or the negative 1-based position of a rejected argument: layout `-1`, triangle `-2`, way `-3`, order `-4`, null active `A` `-5`, leading dimension `-6`, null active `E` `-7`, and null or malformed active `IPIV` `-8`. Unrepresentable active matrix arithmetic maps to `LDA` (`-6`), while unrepresentable `E` or `IPIV` indices map to `-7` or `-8`, respectively. + + + +#### c_dsyconvf_rook_ndarray( uplo, way, N, A, strideA1, strideA2, offsetA, E, strideE, offsetE, IPIV, strideIPIV, offsetIPIV ) + +Uses explicit element strides and offsets. + +```c +LAPACK_INT API_SUFFIX(c_dsyconvf_rook_ndarray)( LAPACK_UPLO uplo, char way, LAPACK_INT N, double *A, LAPACK_INT strideA1, LAPACK_INT strideA2, LAPACK_INT offsetA, double *E, LAPACK_INT strideE, LAPACK_INT offsetE, const LAPACK_INT *IPIV, LAPACK_INT strideIPIV, LAPACK_INT offsetIPIV ); +``` + +Strides and offsets have the same element-index meanings as the JavaScript ndarray interface. The function returns `0` on success or a negative argument position: + +| Argument | Rejected condition / status | +| --- | --- | +| `uplo`, `way`, `N` | Invalid scalar / `-1`, `-2`, `-3`. | +| `A` | Null active pointer / `-4`. | +| `strideA1` | Invalid row stride / `-5`. | +| `strideA2` | Invalid column stride or matrix collision / `-6`. | +| `offsetA` | Invalid matrix offset or index arithmetic / `-7`. | +| `E` | Null active pointer / `-8`. | +| `strideE` | Invalid mutable vector stride / `-9`. | +| `offsetE` | Invalid vector offset or index arithmetic / `-10`. | +| `IPIV` | Null pointer or malformed active pivot sequence / `-11`. | +| `strideIPIV` | Invalid pivot stride arithmetic / `-12`. | +| `offsetIPIV` | Invalid pivot offset or index arithmetic / `-13`. | + +
+ + + +
+ +### Notes + +- C validates scalar selectors and dimensions before the `N=0` quick return. The standard interface also validates `LDA>=1`. Empty calls may use null buffers; unused ndarray strides and offsets are ignored. +- C validates active metadata and the complete pivot sequence before mutation. The returning LAPACK error helper reports rejected arguments; the interfaces return the negative statuses documented above. +- Pointer-only C interfaces cannot infer allocation capacities. The caller must supply sufficient physical storage, an injective full matrix view, and pairwise disjoint indexed-byte envelopes for `A`, `E`, and `IPIV`. No concurrent external mutation is supported. +- Active arithmetic, pointer indices, and DSWAP's indexed and post-increment positions must fit the actual configured integer widths. `LAPACK_INT` and the dependency's `CBLAS_INT` are separate requirements; API suffixing alone does not change either width. +- Both interfaces preserve `IPIV`, the diagonal, opposite triangle, and padding. Reversion also preserves `E`. + +
+ + + +
+ +### Examples + +```c +#include "stdlib/lapack/base/dsyconvf_rook.h" +#include "stdlib/lapack/base/shared.h" +#include +#include +#include + +int main( void ) { + // Upper rook-factor storage; 999 is an untouched opposite-triangle guard: + double A[] = { 0.0, 2.0, 999.0, 0.0 }; + double E[] = { -9.0, -9.0 }; + const LAPACK_INT IPIV[] = { -1, -2 }; + LAPACK_INT info; + + // Convert the genuine 2x2 block without changing signed 1-based pivots: + info = API_SUFFIX(c_dsyconvf_rook)( LAPACK_ROW_MAJOR, LAPACK_UPPER_TRIANGLE, 'C', 2, A, 2, E, IPIV ); + if ( info != 0 || A[ 1 ] != 0.0 || E[ 0 ] != 0.0 || signbit( E[ 0 ] ) || E[ 1 ] != 2.0 ) { + fprintf( stderr, "Unexpected conversion result.\n" ); + return EXIT_FAILURE; + } + printf( "Converted A: %g, %g, %g, %g\n", A[ 0 ], A[ 1 ], A[ 2 ], A[ 3 ] ); + printf( "Extracted E: %g, %g\n", E[ 0 ], E[ 1 ] ); + + // Revert with row and column strides expressed in elements: + info = API_SUFFIX(c_dsyconvf_rook_ndarray)( LAPACK_UPPER_TRIANGLE, 'R', 2, A, 2, 1, 0, E, 1, 0, IPIV, 1, 0 ); + if ( info != 0 || A[ 1 ] != 2.0 || A[ 2 ] != 999.0 || E[ 1 ] != 2.0 ) { + fprintf( stderr, "Unexpected reversion result.\n" ); + return EXIT_FAILURE; + } + printf( "Reverted A: %g, %g, %g, %g\n", A[ 0 ], A[ 1 ], A[ 2 ], A[ 3 ] ); + return EXIT_SUCCESS; +} +``` + +
+ + + +
+ + + +* * * + +
+ +## References + +The conversion algorithm is adapted from [Reference-LAPACK `DSYCONVF_ROOK`][lapack-source] at commit `2e5d9c1273435fbd953adb294ed603e4789afaba`. The original Reference-LAPACK copyright, conditions, and disclaimer are retained in the package [NOTICE][lapack-notice] and reproduced below for source and binary distributions. + +```text +Copyright (c) 1992-2025 The University of Tennessee and The University + of Tennessee Research Foundation. All rights + reserved. +Copyright (c) 2000-2025 The University of California Berkeley. All + rights reserved. +Copyright (c) 2006-2025 The University of Colorado Denver. All rights + reserved. + +$COPYRIGHT$ + +Additional copyrights may follow + +$HEADER$ + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +- Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +- Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer listed + in this license in the documentation and/or other materials + provided with the distribution. + +- Neither the name of the copyright holders nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +The copyright holders provide no reassurances that the source code +provided does not infringe any patent, copyright, or any other +intellectual property rights of third parties. The copyright holders +disclaim any liability to any recipient for claims brought against +recipient by any third party for infringement of that parties +intellectual property rights. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +``` + +
+ + + + + + + + + + + + + + diff --git a/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/benchmark/benchmark.js b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/benchmark/benchmark.js new file mode 100644 index 000000000000..64e04a21a291 --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/benchmark/benchmark.js @@ -0,0 +1,135 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +// MODULES // + +var bench = require( '@stdlib/bench' ); +var Float64Array = require( '@stdlib/array/float64' ); +var Int32Array = require( '@stdlib/array/int32' ); +var format = require( '@stdlib/string/format' ); +var pkg = require( './../package.json' ).name; +var dsyconvfRook = require( './../lib' ); + + +// FUNCTIONS // + +/** +* Creates a bounded conversion/reversion benchmark. +* +* @private +* @param {PositiveInteger} N - matrix order +* @param {string} uplo - stored triangle +* @returns {Function} benchmark function +*/ +function createBenchmark( N, uplo ) { + var IPIV; + var A; + var E; + var i; + var j; + + A = new Float64Array( N*N ); + E = new Float64Array( N ); + IPIV = new Int32Array( N ); + for ( i = 0; i < N; i++ ) { + IPIV[ i ] = i + 1; + for ( j = 0; j < N; j++ ) { + A[ (i*N)+j ] = i + j + 1.0; + } + } + // The first two rows form a 2x2 block with distinct negative pivots: + IPIV[ 0 ] = -1; + IPIV[ 1 ] = -2; + return benchmark; + + /** + * Benchmark function. + * + * @private + * @param {Benchmark} b - benchmark instance + */ + function benchmark( b ) { + var info; + var i; + + b.tic(); + for ( i = 0; i < b.iterations; i++ ) { + info = dsyconvfRook( 'row-major', uplo, 'convert', N, A, N, E, IPIV ); + if ( info !== 0 ) { + b.fail( 'should return a success status code' ); + break; + } + info = dsyconvfRook( 'row-major', uplo, 'revert', N, A, N, E, IPIV ); + if ( info !== 0 ) { + b.fail( 'should return a success status code' ); + break; + } + } + b.toc(); + if ( + A[ 1 ] !== 2.0 || + A[ N ] !== 2.0 || + IPIV[ 0 ] !== -1 || + IPIV[ 1 ] !== -2 + ) { + b.fail( 'should preserve factor storage after a complete cycle' ); + } + if ( + ( uplo === 'upper' && E[ 1 ] !== 2.0 ) || + ( uplo === 'lower' && E[ 0 ] !== 2.0 ) + ) { + b.fail( 'should extract the known off-diagonal block value' ); + } + b.pass( 'benchmark finished' ); + b.end(); + } +} + + +// MAIN // + +/** +* Main execution sequence. +* +* @private +*/ +function main() { + var options; + var sizes; + var uplos; + var name; + var i; + var j; + + options = { + 'iterations': 1000, + 'repeats': 2 + }; + sizes = [ 8, 32 ]; + uplos = [ 'upper', 'lower' ]; + for ( i = 0; i < sizes.length; i++ ) { + for ( j = 0; j < uplos.length; j++ ) { + name = format( '%s:triangle=%s:N=%d', pkg, uplos[ j ], sizes[ i ] ); + bench( name, options, createBenchmark( sizes[ i ], uplos[ j ] ) ); + } + } +} + +main(); diff --git a/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/benchmark/benchmark.ndarray.js b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/benchmark/benchmark.ndarray.js new file mode 100644 index 000000000000..4d3165295984 --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/benchmark/benchmark.ndarray.js @@ -0,0 +1,135 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +// MODULES // + +var bench = require( '@stdlib/bench' ); +var Float64Array = require( '@stdlib/array/float64' ); +var Int32Array = require( '@stdlib/array/int32' ); +var format = require( '@stdlib/string/format' ); +var pkg = require( './../package.json' ).name; +var dsyconvfRook = require( './../lib' ).ndarray; + + +// FUNCTIONS // + +/** +* Creates a bounded conversion/reversion benchmark. +* +* @private +* @param {PositiveInteger} N - matrix order +* @param {string} uplo - stored triangle +* @returns {Function} benchmark function +*/ +function createBenchmark( N, uplo ) { + var IPIV; + var A; + var E; + var i; + var j; + + A = new Float64Array( N*N ); + E = new Float64Array( N ); + IPIV = new Int32Array( N ); + for ( i = 0; i < N; i++ ) { + IPIV[ i ] = i + 1; + for ( j = 0; j < N; j++ ) { + A[ (i*N)+j ] = i + j + 1.0; + } + } + // The first two rows form a 2x2 block with distinct negative pivots: + IPIV[ 0 ] = -1; + IPIV[ 1 ] = -2; + return benchmark; + + /** + * Benchmark function. + * + * @private + * @param {Benchmark} b - benchmark instance + */ + function benchmark( b ) { + var info; + var i; + + b.tic(); + for ( i = 0; i < b.iterations; i++ ) { + info = dsyconvfRook( uplo, 'convert', N, A, N, 1, 0, E, 1, 0, IPIV, 1, 0 ); + if ( info !== 0 ) { + b.fail( 'should return a success status code' ); + break; + } + info = dsyconvfRook( uplo, 'revert', N, A, N, 1, 0, E, 1, 0, IPIV, 1, 0 ); + if ( info !== 0 ) { + b.fail( 'should return a success status code' ); + break; + } + } + b.toc(); + if ( + A[ 1 ] !== 2.0 || + A[ N ] !== 2.0 || + IPIV[ 0 ] !== -1 || + IPIV[ 1 ] !== -2 + ) { + b.fail( 'should preserve factor storage after a complete cycle' ); + } + if ( + ( uplo === 'upper' && E[ 1 ] !== 2.0 ) || + ( uplo === 'lower' && E[ 0 ] !== 2.0 ) + ) { + b.fail( 'should extract the known off-diagonal block value' ); + } + b.pass( 'benchmark finished' ); + b.end(); + } +} + + +// MAIN // + +/** +* Main execution sequence. +* +* @private +*/ +function main() { + var options; + var sizes; + var uplos; + var name; + var i; + var j; + + options = { + 'iterations': 1000, + 'repeats': 2 + }; + sizes = [ 8, 32 ]; + uplos = [ 'upper', 'lower' ]; + for ( i = 0; i < sizes.length; i++ ) { + for ( j = 0; j < uplos.length; j++ ) { + name = format( '%s:ndarray:triangle=%s:N=%d', pkg, uplos[ j ], sizes[ i ] ); + bench( name, options, createBenchmark( sizes[ i ], uplos[ j ] ) ); + } + } +} + +main(); diff --git a/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/benchmark/c/Makefile b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/benchmark/c/Makefile new file mode 100644 index 000000000000..979768abbcec --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/benchmark/c/Makefile @@ -0,0 +1,146 @@ +#/ +# @license Apache-2.0 +# +# Copyright (c) 2026 The Stdlib Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +#/ + +# VARIABLES # + +ifndef VERBOSE + QUIET := @ +else + QUIET := +endif + +# Determine the OS ([1][1], [2][2]). +# +# [1]: https://en.wikipedia.org/wiki/Uname#Examples +# [2]: http://stackoverflow.com/a/27776822/2225624 +OS ?= $(shell uname) +ifneq (, $(findstring MINGW,$(OS))) + OS := WINNT +else +ifneq (, $(findstring MSYS,$(OS))) + OS := WINNT +else +ifneq (, $(findstring CYGWIN,$(OS))) + OS := WINNT +else +ifneq (, $(findstring Windows_NT,$(OS))) + OS := WINNT +endif +endif +endif +endif + +# Define the program used for compiling C source files: +ifdef C_COMPILER + CC := $(C_COMPILER) +else + CC := gcc +endif + +# Define the command-line options when compiling C files: +CFLAGS ?= \ + -std=c99 \ + -O3 \ + -Wall \ + -pedantic + +# Determine whether to generate position independent code ([1][1], [2][2]). +# +# [1]: https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#Code-Gen-Options +# [2]: http://stackoverflow.com/questions/5311515/gcc-fpic-option +ifeq ($(OS), WINNT) + fPIC ?= +else + fPIC ?= -fPIC +endif + +# List of includes (e.g., `-I /foo/bar -I /beep/boop/include`): +INCLUDE ?= + +# List of source files: +SOURCE_FILES ?= + +# List of libraries (e.g., `-lopenblas -lpthread`): +LIBRARIES ?= + +# List of library paths (e.g., `-L /foo/bar -L /beep/boop`): +LIBPATH ?= + +# List of C targets: +c_targets := benchmark.out + + +# RULES # + +#/ +# Compiles source files. +# +# @param {string} [C_COMPILER] - C compiler (e.g., `gcc`) +# @param {string} [CFLAGS] - C compiler options +# @param {(string|void)} [fPIC] - compiler flag determining whether to generate position independent code (e.g., `-fPIC`) +# @param {string} [INCLUDE] - list of includes (e.g., `-I /foo/bar -I /beep/boop/include`) +# @param {string} [SOURCE_FILES] - list of source files +# @param {string} [LIBPATH] - list of library paths (e.g., `-L /foo/bar -L /beep/boop`) +# @param {string} [LIBRARIES] - list of libraries (e.g., `-lopenblas -lpthread`) +# +# @example +# make +# +# @example +# make all +#/ +all: $(c_targets) + +.PHONY: all + +#/ +# Compiles C source files. +# +# @private +# @param {string} CC - C compiler (e.g., `gcc`) +# @param {string} CFLAGS - C compiler options +# @param {(string|void)} fPIC - compiler flag determining whether to generate position independent code (e.g., `-fPIC`) +# @param {string} INCLUDE - list of includes (e.g., `-I /foo/bar`) +# @param {string} SOURCE_FILES - list of source files +# @param {string} LIBPATH - list of library paths (e.g., `-L /foo/bar`) +# @param {string} LIBRARIES - list of libraries (e.g., `-lopenblas`) +#/ +$(c_targets): %.out: %.c + $(QUIET) $(CC) $(CFLAGS) $(fPIC) $(INCLUDE) -o $@ $(SOURCE_FILES) $< $(LIBPATH) -lm $(LIBRARIES) + +#/ +# Runs compiled benchmarks. +# +# @example +# make run +#/ +run: $(c_targets) + $(QUIET) ./$< + +.PHONY: run + +#/ +# Removes generated files. +# +# @example +# make clean +#/ +clean: + $(QUIET) -rm -f *.o *.out + +.PHONY: clean diff --git a/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/benchmark/c/benchmark.c b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/benchmark/c/benchmark.c new file mode 100644 index 000000000000..1595b7f729ba --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/benchmark/c/benchmark.c @@ -0,0 +1,164 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#include "stdlib/lapack/base/dsyconvf_rook.h" +#include "stdlib/lapack/base/shared.h" +#include +#include +#include + +#define ITERATIONS 1000 +#define REPEATS 2 + +/** +* Returns a clock time in seconds. +* +* @return clock time +*/ +static double tic( void ) { + struct timeval now; + gettimeofday( &now, NULL ); + return (double)now.tv_sec + (double)now.tv_usec/1.0e6; +} + +/** +* Runs conversion/reversion cycles and validates the final factor storage. +* +* @param N matrix order +* @param uplo stored triangle +* @param ndarray whether to use the ndarray interface +* @return elapsed seconds or -1 on failure +*/ +static double benchmark( const LAPACK_INT N, const LAPACK_UPLO uplo, const int ndarray ) { + double *A; + double *E; + LAPACK_INT *IPIV; + LAPACK_INT info; + LAPACK_INT i; + LAPACK_INT j; + double elapsed; + double t; + int k; + + A = (double *)malloc( (size_t)(N*N) * sizeof( double ) ); + E = (double *)malloc( (size_t)N * sizeof( double ) ); + IPIV = (LAPACK_INT *)malloc( (size_t)N * sizeof( LAPACK_INT ) ); + if ( A == NULL || E == NULL || IPIV == NULL ) { + fprintf( stderr, "Error allocating benchmark buffers.\n" ); + free( A ); + free( E ); + free( IPIV ); + return -1.0; + } + for ( i = 0; i < N; i++ ) { + IPIV[ i ] = i + 1; + E[ i ] = -9.0; + for ( j = 0; j < N; j++ ) { + A[ (i*N)+j ] = (double)(i+j) + 1.0; + } + } + IPIV[ 0 ] = -1; + IPIV[ 1 ] = -2; + info = 0; + + t = tic(); + for ( k = 0; k < ITERATIONS; k++ ) { + if ( ndarray ) { + info = API_SUFFIX(c_dsyconvf_rook_ndarray)( uplo, 'C', N, A, N, 1, 0, E, 1, 0, IPIV, 1, 0 ); + } else { + info = API_SUFFIX(c_dsyconvf_rook)( LAPACK_ROW_MAJOR, uplo, 'C', N, A, N, E, IPIV ); + } + if ( info != 0 ) { + break; + } + if ( ndarray ) { + info = API_SUFFIX(c_dsyconvf_rook_ndarray)( uplo, 'R', N, A, N, 1, 0, E, 1, 0, IPIV, 1, 0 ); + } else { + info = API_SUFFIX(c_dsyconvf_rook)( LAPACK_ROW_MAJOR, uplo, 'R', N, A, N, E, IPIV ); + } + if ( info != 0 ) { + break; + } + } + elapsed = tic() - t; + if ( info != 0 || IPIV[ 0 ] != -1 || IPIV[ 1 ] != -2 ) { + elapsed = -1.0; + } + for ( i = 0; i < N; i++ ) { + for ( j = 0; j < N; j++ ) { + if ( A[ (i*N)+j ] != (double)(i+j) + 1.0 ) { + elapsed = -1.0; + } + } + } + if ( ( uplo == LAPACK_UPPER_TRIANGLE && E[ 1 ] != 2.0 ) || ( uplo == LAPACK_LOWER_TRIANGLE && E[ 0 ] != 2.0 ) ) { + elapsed = -1.0; + } + free( A ); + free( E ); + free( IPIV ); + return elapsed; +} + +/** +* Main execution sequence. +*/ +int main( void ) { + const LAPACK_INT sizes[] = { 8, 32 }; + const LAPACK_UPLO uplos[] = { LAPACK_UPPER_TRIANGLE, LAPACK_LOWER_TRIANGLE }; + double elapsed; + int count; + int passing; + int i; + int j; + int k; + int r; + + count = 0; + passing = 0; + printf( "TAP version 13\n" ); + for ( i = 0; i < 2; i++ ) { + for ( j = 0; j < 2; j++ ) { + for ( k = 0; k < 2; k++ ) { + for ( r = 0; r < REPEATS; r++ ) { + count += 1; + printf( "# c::dsyconvf-rook:N=%d:uplo=%s:ndarray=%d\n", (int)sizes[ i ], j ? "lower" : "upper", k ); + elapsed = benchmark( sizes[ i ], uplos[ j ], k ); + if ( elapsed < 0.0 ) { + printf( "not ok %d benchmark failed\n", count ); + } else { + printf( " ---\n" ); + printf( " iterations: %d\n", ITERATIONS ); + printf( " elapsed: %0.9f\n", elapsed ); + printf( " ...\n" ); + printf( "ok %d benchmark finished\n", count ); + passing += 1; + } + } + } + } + } + printf( "1..%d\n", count ); + printf( "# total %d\n", count ); + printf( "# pass %d\n", passing ); + if ( passing == count ) { + printf( "# ok\n" ); + return EXIT_SUCCESS; + } + return EXIT_FAILURE; +} diff --git a/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/binding.gyp b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/binding.gyp new file mode 100644 index 000000000000..864d9109e892 --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/binding.gyp @@ -0,0 +1,265 @@ +# @license Apache-2.0 +# +# Copyright (c) 2018 The Stdlib Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# A `.gyp` file for building a Node.js native add-on. +# +# [1]: https://gyp.gsrc.io/docs/InputFormatReference.md +# [2]: https://gyp.gsrc.io/docs/UserDocumentation.md +{ + # List of files to include in this file: + 'includes': [ + './include.gypi', + ], + + # Define variables to be used throughout the configuration for all targets: + 'variables': { + # Target name should match the add-on export name: + 'addon_target_name%': 'addon', + + # Fortran compiler (to override -Dfortran_compiler=): + 'fortran_compiler%': 'gfortran', + + # Fortran compiler flags: + 'fflags': [ + # Specify the Fortran standard to which a program is expected to conform: + '-std=f95', + + # Indicate that the layout is free-form source code: + '-ffree-form', + + # Aggressive optimization: + '-O3', + + # Enable commonly used warning options: + '-Wall', + + # Warn if source code contains problematic language features: + '-Wextra', + + # Warn if a procedure is called without an explicit interface: + '-Wimplicit-interface', + + # Do not transform names of entities specified in Fortran source files by appending underscores (i.e., don't mangle names, thus allowing easier usage in C wrappers): + '-fno-underscoring', + + # Warn if source code contains Fortran 95 extensions and C-language constructs: + '-pedantic', + + # Compile but do not link (output is an object file): + '-c', + ], + + # Set variables based on the host OS: + 'conditions': [ + [ + 'OS=="win"', + { + # Define the object file suffix: + 'obj': 'obj', + }, + { + # Define the object file suffix: + 'obj': 'o', + } + ], # end condition (OS=="win") + ], # end conditions + }, # end variables + + # Define compile targets: + 'targets': [ + + # Target to generate an add-on: + { + # The target name should match the add-on export name: + 'target_name': '<(addon_target_name)', + + # Define dependencies: + 'dependencies': [], + + # Define directories which contain relevant include headers: + 'include_dirs': [ + # Local include directory: + '<@(include_dirs)', + ], + + # List of source files: + 'sources': [ + '<@(src_files)', + ], + + # Settings which should be applied when a target's object files are used as linker input: + 'link_settings': { + # Define libraries: + 'libraries': [ + '<@(libraries)', + ], + + # Define library directories: + 'library_dirs': [ + '<@(library_dirs)', + ], + }, + + # C/C++ compiler flags: + 'cflags': [ + # Enable commonly used warning options: + '-Wall', + + # Aggressive optimization: + '-O3', + ], + + # C specific compiler flags: + 'cflags_c': [ + # Specify the C standard to which a program is expected to conform: + '-std=c99', + ], + + # C++ specific compiler flags: + 'cflags_cpp': [ + # Specify the C++ standard to which a program is expected to conform: + '-std=c++11', + ], + + # Linker flags: + 'ldflags': [], + + # Apply conditions based on the host OS: + 'conditions': [ + [ + 'OS=="mac"', + { + # Linker flags: + 'ldflags': [ + '-undefined dynamic_lookup', + '-Wl,-no-pie', + '-Wl,-search_paths_first', + ], + }, + ], # end condition (OS=="mac") + [ + 'OS!="win"', + { + # C/C++ flags: + 'cflags': [ + # Generate platform-independent code: + '-fPIC', + ], + }, + ], # end condition (OS!="win") + ], # end conditions + + # Define custom build actions for particular inputs: + 'rules': [ + { + # Define a rule for processing Fortran files: + 'extension': 'f', + + # Define the pathnames to be used as inputs when performing processing: + 'inputs': [ + # Full path of the current input: + '<(RULE_INPUT_PATH)' + ], + + # Define the outputs produced during processing: + 'outputs': [ + # Store an output object file in a directory for placing intermediate results (only accessible within a single target): + '<(INTERMEDIATE_DIR)/<(RULE_INPUT_ROOT).<(obj)' + ], + + # Define the rule for compiling Fortran based on the host OS: + 'conditions': [ + [ + 'OS=="win"', + + # Rule to compile Fortran on Windows: + { + 'rule_name': 'compile_fortran_windows', + 'message': 'Compiling Fortran file <(RULE_INPUT_PATH) on Windows...', + + 'process_outputs_as_sources': 0, + + # Define the command-line invocation: + 'action': [ + '<(fortran_compiler)', + '<@(fflags)', + '<@(_inputs)', + '-o', + '<@(_outputs)', + ], + }, + + # Rule to compile Fortran on non-Windows: + { + 'rule_name': 'compile_fortran_linux', + 'message': 'Compiling Fortran file <(RULE_INPUT_PATH) on Linux...', + + 'process_outputs_as_sources': 1, + + # Define the command-line invocation: + 'action': [ + '<(fortran_compiler)', + '<@(fflags)', + '-fPIC', # generate platform-independent code + '<@(_inputs)', + '-o', + '<@(_outputs)', + ], + } + ], # end condition (OS=="win") + ], # end conditions + }, # end rule (extension=="f") + ], # end rules + }, # end target <(addon_target_name) + + # Target to copy a generated add-on to a standard location: + { + 'target_name': 'copy_addon', + + # Declare that the output of this target is not linked: + 'type': 'none', + + # Define dependencies: + 'dependencies': [ + # Require that the add-on be generated before building this target: + '<(addon_target_name)', + ], + + # Define a list of actions: + 'actions': [ + { + 'action_name': 'copy_addon', + 'message': 'Copying addon...', + + # Explicitly list the inputs in the command-line invocation below: + 'inputs': [], + + # Declare the expected outputs: + 'outputs': [ + '<(addon_output_dir)/<(addon_target_name).node', + ], + + # Define the command-line invocation: + 'action': [ + 'cp', + '<(PRODUCT_DIR)/<(addon_target_name).node', + '<(addon_output_dir)/<(addon_target_name).node', + ], + }, + ], # end actions + }, # end target copy_addon + ], # end targets +} diff --git a/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/docs/repl.txt b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/docs/repl.txt new file mode 100644 index 000000000000..acf0ccf84f5a --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/docs/repl.txt @@ -0,0 +1,150 @@ + +{{alias}}( order, uplo, way, N, A, LDA, E, IPIV ) + Converts or reverts symmetric indefinite rook-factor storage in place. + + IPIV is read-only, signed, and 1-based, exactly as supplied by LAPACK. + Adjacent negative values describe a 2x2 block and can differ. The value -1 + retains the first-row target and the negative block marker. + + Conversion extracts the off-diagonal entries of the 2x2 diagonal blocks + into E, zeros their stored matrix entries, and applies row permutations. + Reversion undoes the permutations and restores those entries from E. + Reversion leaves E unchanged. The diagonal, opposite triangle, padding, + and IPIV remain unchanged in both directions. + + The full N-by-N matrix view and N-element E/IPIV indexed-byte envelopes + must be pairwise disjoint, even if interleaved active slots differ. + Disjoint typed-array views in one ordinary ArrayBuffer are permitted. + + For N>0, all actual typed-array backing stores must be ordinary + ArrayBuffer objects. SharedArrayBuffer-backed views are rejected with + a TypeError before routine-owned writes, including shared buffers + returned by structuredClone. A shadowed .buffer property does not + change this rule. + Exotic ArrayBuffers with storage externally aliased by foreign native + addons are outside the caller contract. + + After scalar validation, N=0 returns 0 without accessing buffers. LDA + must still be at least 1. Invalid scalar selectors or dimensions fail + even for an empty matrix. + + Parameters + ---------- + order: string + Must be 'row-major' or 'column-major'. + + uplo: string + Stored triangle. Must be 'upper' or 'lower'. + + way: string + Conversion direction. Must be 'convert' or 'revert'. + + N: integer + Matrix order. Nonnegative safe integer not exceeding 2147483647. + + A: Float64Array + Input/output factor storage. The full leading N-by-N view must fit. + + LDA: integer + Leading dimension. Must be at least max(1,N). + + E: Float64Array + N off-diagonal block values. Output for conversion; input for + reversion. + + IPIV: Int32Array + N unchanged signed 1-based LAPACK rook pivot values. + + Returns + ------- + info: number + Zero on success. + + Examples + -------- + > var A = new {{alias:@stdlib/array/float64}}( [ 0, 2, 999, 0 ] ); + > var E = new {{alias:@stdlib/array/float64}}( 2 ); + > var IPIV = new {{alias:@stdlib/array/int32}}( [ -1, -2 ] ); + > {{alias}}( 'row-major', 'upper', 'convert', 2, A, 2, E, IPIV ) + 0 + > E + [ 0.0, 2.0 ] + > {{alias}}( 'row-major', 'upper', 'revert', 2, A, 2, E, IPIV ) + 0 + > A + [ 0.0, 2.0, 999.0, 0.0 ] + + +{{alias}}.ndarray( uplo, way, N, A, sa1, sa2, oa, E, se, oe, IPIV, sp, op ) + Converts or reverts rook-factor storage using alternative indexing + semantics. + + All strides and offsets are element indices relative to each typed-array + view. Positive and negative independent strides are supported. The full + matrix view must be injective. For N>1, E cannot have zero stride. + Read-only IPIV may have zero stride if its repeated pivot sequence is + structurally valid. All active index arithmetic must use exact safe + integers, and all views must fit their buffers. + + This interface has the same pivot, buffer, aliasing, mutation, and + zero-order rules as the standard interface. Unused strides and offsets + are not accessed when N=0. + + Parameters + ---------- + uplo: string + Stored triangle. Must be 'upper' or 'lower'. + + way: string + Conversion direction. Must be 'convert' or 'revert'. + + N: integer + Matrix order. + + A: Float64Array + Input/output factor storage. + + sa1: integer + Matrix row stride. + + sa2: integer + Matrix column stride. + + oa: integer + Starting index for A. + + E: Float64Array + Off-diagonal block values. + + se: integer + E stride. + + oe: integer + Starting index for E. + + IPIV: Int32Array + Read-only signed 1-based LAPACK rook pivots. + + sp: integer + IPIV stride. + + op: integer + Starting index for IPIV. + + Returns + ------- + info: number + Zero on success. + + Examples + -------- + > var A = new {{alias:@stdlib/array/float64}}( [ 0, 2, 999, 0 ] ); + > var E = new {{alias:@stdlib/array/float64}}( [ 8.0, 0.0, 0.0, 8.0 ] ); + > var P = new {{alias:@stdlib/array/int32}}( [ 9, -1, -2, 9 ] ); + > {{alias}}.ndarray( 'upper', 'convert', 2, A, 2, 1, 0, E, 1, 1, P, 1, 1 ) + 0 + > E + [ 8.0, 0.0, 2.0, 8.0 ] + + See Also + -------- diff --git a/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/docs/types/index.d.ts b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/docs/types/index.d.ts new file mode 100644 index 000000000000..38847a447e8f --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/docs/types/index.d.ts @@ -0,0 +1,159 @@ +/* +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +// TypeScript Version: 4.1 + +/// + +import { Layout, MatrixTriangle } from '@stdlib/types/blas'; + +/** +* Conversion direction. +*/ +type Way = 'convert' | 'revert'; + +/** +* Interface describing `dsyconvfRook`. +*/ +interface Routine { + /** + * Converts or reverts symmetric indefinite rook-factor storage in place. + * + * ## Notes + * + * - `IPIV` is read-only, signed, and 1-based, exactly as in LAPACK. + * - Distinct adjacent negative pivots identify a 2x2 block; `-1` retains the first-row target and block marker. + * - Conversion writes `E`; reversion leaves `E` unchanged. + * - The full matrix and vector indexed-byte envelopes must be disjoint. + * - For N greater than zero, each actual typed-array backing store must be an ordinary ArrayBuffer; SharedArrayBuffer-backed views are rejected before routine-owned writes. + * - Exotic ArrayBuffers whose physical storage is externally aliased by foreign native addons are outside the caller contract. + * - The declared typed-array types cannot express this runtime backing-store precondition. + * + * @param order - row-major or column-major storage + * @param uplo - stored matrix triangle + * @param way - conversion direction + * @param N - matrix order (nonnegative safe integer not exceeding 2147483647) + * @param A - input/output matrix + * @param LDA - leading dimension, at least max(1,N) + * @param E - off-diagonal block values (output for conversion, input for reversion) + * @param IPIV - read-only signed 1-based LAPACK rook pivots + * @throws selectors and active buffer types must be valid + * @throws dimensions, bounds, aliasing, and pivots must satisfy the documented preconditions + * @returns zero on success + * + * @example + * var Float64Array = require( '@stdlib/array/float64' ); + * var Int32Array = require( '@stdlib/array/int32' ); + * + * var A = new Float64Array( [ 0.0, 2.0, 999.0, 0.0 ] ); + * var E = new Float64Array( 2 ); + * var IPIV = new Int32Array( [ -1, -2 ] ); + * + * var info = dsyconvfRook( 'row-major', 'upper', 'convert', 2, A, 2, E, IPIV ); + * // returns 0 + * // A => [ 0.0, 0.0, 999.0, 0.0 ] + * // E => [ 0.0, 2.0 ] + */ + ( order: Layout, uplo: MatrixTriangle, way: Way, N: number, A: Float64Array, LDA: number, E: Float64Array, IPIV: Int32Array ): number; + + /** + * Converts or reverts rook-factor storage using alternative indexing semantics. + * + * ## Notes + * + * - All strides and offsets are element indices relative to their typed-array views. + * - The full leading N-by-N matrix view must be injective and in bounds. + * - For N greater than one, the E stride must be nonzero in both directions. + * - Read-only IPIV may have zero stride if its complete repeated pivot sequence is structurally valid. + * - Positive and negative independent strides are supported. + * - Active arrays require ordinary ArrayBuffer backing stores; SharedArrayBuffer-backed views, including views of shared buffers returned by structuredClone, are rejected before routine-owned writes. + * - Externally aliased ArrayBuffers from foreign native addons are outside the caller contract; this runtime precondition cannot be expressed by the declared typed-array types. + * + * @param uplo - stored matrix triangle + * @param way - conversion direction + * @param N - matrix order + * @param A - input/output matrix + * @param strideA1 - matrix row stride + * @param strideA2 - matrix column stride + * @param offsetA - starting index for A + * @param E - off-diagonal block values + * @param strideE - E stride + * @param offsetE - starting index for E + * @param IPIV - read-only signed 1-based LAPACK rook pivots + * @param strideIPIV - IPIV stride + * @param offsetIPIV - starting index for IPIV + * @throws selectors and active buffer types must be valid + * @throws dimensions, metadata, bounds, aliasing, and pivots must satisfy the documented preconditions + * @returns zero on success + * + * @example + * var Float64Array = require( '@stdlib/array/float64' ); + * var Int32Array = require( '@stdlib/array/int32' ); + * + * var A = new Float64Array( [ 7.0, 0.0, 2.0, 999.0, 0.0, 7.0 ] ); + * var E = new Float64Array( [ 8.0, 0.0, 0.0, 8.0 ] ); + * var IPIV = new Int32Array( [ 9, -1, -2, 9 ] ); + * + * var info = dsyconvfRook.ndarray( 'upper', 'convert', 2, A, 2, 1, 1, E, 1, 1, IPIV, 1, 1 ); + * // returns 0 + * // E => [ 8.0, 0.0, 2.0, 8.0 ] + */ + ndarray( uplo: MatrixTriangle, way: Way, N: number, A: Float64Array, strideA1: number, strideA2: number, offsetA: number, E: Float64Array, strideE: number, offsetE: number, IPIV: Int32Array, strideIPIV: number, offsetIPIV: number ): number; +} + +/** +* Converts or reverts symmetric indefinite rook-factor storage in place. +* +* @param order - storage layout +* @param uplo - stored matrix triangle +* @param way - conversion direction +* @param N - matrix order +* @param A - input/output matrix +* @param LDA - leading dimension, at least max(1,N) +* @param E - off-diagonal block values +* @param IPIV - read-only signed 1-based LAPACK rook pivots +* @returns zero on success +* +* @example +* var Float64Array = require( '@stdlib/array/float64' ); +* var Int32Array = require( '@stdlib/array/int32' ); +* +* var A = new Float64Array( [ 0.0, 2.0, 999.0, 0.0 ] ); +* var E = new Float64Array( 2 ); +* var IPIV = new Int32Array( [ -1, -2 ] ); +* +* dsyconvfRook( 'row-major', 'upper', 'convert', 2, A, 2, E, IPIV ); +* // E => [ 0.0, 2.0 ] +* +* @example +* var Float64Array = require( '@stdlib/array/float64' ); +* var Int32Array = require( '@stdlib/array/int32' ); +* +* var A = new Float64Array( [ 0.0, 0.0, 999.0, 0.0 ] ); +* var E = new Float64Array( [ 0.0, 2.0 ] ); +* var IPIV = new Int32Array( [ -1, -2 ] ); +* +* dsyconvfRook.ndarray( 'upper', 'revert', 2, A, 2, 1, 0, E, 1, 0, IPIV, 1, 0 ); +* // A => [ 0.0, 2.0, 999.0, 0.0 ] +*/ +declare var dsyconvfRook: Routine; + + +// EXPORTS // + +export = dsyconvfRook; diff --git a/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/docs/types/test.ts b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/docs/types/test.ts new file mode 100644 index 000000000000..76ce93cc24cf --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/docs/types/test.ts @@ -0,0 +1,90 @@ +/* +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +import dsyconvfRook = require( './index' ); + + +// TESTS // + +const A = new Float64Array( [ 0.0, 2.0, 999.0, 0.0 ] ); +const E = new Float64Array( 2 ); +const IPIV = new Int32Array( [ -1, -2 ] ); + +// Canonical selectors and both public signatures return a numeric status: +dsyconvfRook( 'row-major', 'upper', 'convert', 2, A, 2, E, IPIV ); // $ExpectType number +dsyconvfRook( 'column-major', 'lower', 'revert', 2, A, 2, E, IPIV ); // $ExpectType number +dsyconvfRook.ndarray( 'upper', 'convert', 2, A, 2, 1, 0, E, 1, 0, IPIV, 1, 0 ); // $ExpectType number +dsyconvfRook.ndarray( 'lower', 'revert', 2, A, -2, -1, 3, E, -1, 1, IPIV, -1, 1 ); // $ExpectType number + +// Unsupported selectors remain a compile-time error: +dsyconvfRook( 'F', 'upper', 'convert', 2, A, 2, E, IPIV ); // $ExpectError +dsyconvfRook( 'row-major', 'all', 'convert', 2, A, 2, E, IPIV ); // $ExpectError +dsyconvfRook( 'row-major', 'upper', 'C', 2, A, 2, E, IPIV ); // $ExpectError +dsyconvfRook.ndarray( 'all', 'convert', 2, A, 2, 1, 0, E, 1, 0, IPIV, 1, 0 ); // $ExpectError +dsyconvfRook.ndarray( 'upper', 'R', 2, A, 2, 1, 0, E, 1, 0, IPIV, 1, 0 ); // $ExpectError + +// Each required argument must have its declared type: +dsyconvfRook( false, 'upper', 'convert', 2, A, 2, E, IPIV ); // $ExpectError +dsyconvfRook( 'row-major', false, 'convert', 2, A, 2, E, IPIV ); // $ExpectError +dsyconvfRook( 'row-major', 'upper', false, 2, A, 2, E, IPIV ); // $ExpectError +dsyconvfRook( 'row-major', 'upper', 'convert', false, A, 2, E, IPIV ); // $ExpectError +dsyconvfRook( 'row-major', 'upper', 'convert', 2, [], 2, E, IPIV ); // $ExpectError +dsyconvfRook( 'row-major', 'upper', 'convert', 2, A, false, E, IPIV ); // $ExpectError +dsyconvfRook( 'row-major', 'upper', 'convert', 2, A, 2, [], IPIV ); // $ExpectError +dsyconvfRook( 'row-major', 'upper', 'convert', 2, A, 2, E, [] ); // $ExpectError + +// Missing or extra arguments are rejected: +dsyconvfRook(); // $ExpectError +dsyconvfRook( 'row-major' ); // $ExpectError +dsyconvfRook( 'row-major', 'upper' ); // $ExpectError +dsyconvfRook( 'row-major', 'upper', 'convert' ); // $ExpectError +dsyconvfRook( 'row-major', 'upper', 'convert', 2 ); // $ExpectError +dsyconvfRook( 'row-major', 'upper', 'convert', 2, A ); // $ExpectError +dsyconvfRook( 'row-major', 'upper', 'convert', 2, A, 2 ); // $ExpectError +dsyconvfRook( 'row-major', 'upper', 'convert', 2, A, 2, E ); // $ExpectError +dsyconvfRook( 'row-major', 'upper', 'convert', 2, A, 2, E, IPIV, 0 ); // $ExpectError + +dsyconvfRook.ndarray( false, 'convert', 2, A, 2, 1, 0, E, 1, 0, IPIV, 1, 0 ); // $ExpectError +dsyconvfRook.ndarray( 'upper', false, 2, A, 2, 1, 0, E, 1, 0, IPIV, 1, 0 ); // $ExpectError +dsyconvfRook.ndarray( 'upper', 'convert', false, A, 2, 1, 0, E, 1, 0, IPIV, 1, 0 ); // $ExpectError +dsyconvfRook.ndarray( 'upper', 'convert', 2, [], 2, 1, 0, E, 1, 0, IPIV, 1, 0 ); // $ExpectError +dsyconvfRook.ndarray( 'upper', 'convert', 2, A, false, 1, 0, E, 1, 0, IPIV, 1, 0 ); // $ExpectError +dsyconvfRook.ndarray( 'upper', 'convert', 2, A, 2, false, 0, E, 1, 0, IPIV, 1, 0 ); // $ExpectError +dsyconvfRook.ndarray( 'upper', 'convert', 2, A, 2, 1, false, E, 1, 0, IPIV, 1, 0 ); // $ExpectError +dsyconvfRook.ndarray( 'upper', 'convert', 2, A, 2, 1, 0, [], 1, 0, IPIV, 1, 0 ); // $ExpectError +dsyconvfRook.ndarray( 'upper', 'convert', 2, A, 2, 1, 0, E, false, 0, IPIV, 1, 0 ); // $ExpectError +dsyconvfRook.ndarray( 'upper', 'convert', 2, A, 2, 1, 0, E, 1, false, IPIV, 1, 0 ); // $ExpectError +dsyconvfRook.ndarray( 'upper', 'convert', 2, A, 2, 1, 0, E, 1, 0, [], 1, 0 ); // $ExpectError +dsyconvfRook.ndarray( 'upper', 'convert', 2, A, 2, 1, 0, E, 1, 0, IPIV, false, 0 ); // $ExpectError +dsyconvfRook.ndarray( 'upper', 'convert', 2, A, 2, 1, 0, E, 1, 0, IPIV, 1, false ); // $ExpectError + +// Missing or extra arguments are rejected: +dsyconvfRook.ndarray(); // $ExpectError +dsyconvfRook.ndarray( 'upper' ); // $ExpectError +dsyconvfRook.ndarray( 'upper', 'convert' ); // $ExpectError +dsyconvfRook.ndarray( 'upper', 'convert', 2 ); // $ExpectError +dsyconvfRook.ndarray( 'upper', 'convert', 2, A ); // $ExpectError +dsyconvfRook.ndarray( 'upper', 'convert', 2, A, 2 ); // $ExpectError +dsyconvfRook.ndarray( 'upper', 'convert', 2, A, 2, 1 ); // $ExpectError +dsyconvfRook.ndarray( 'upper', 'convert', 2, A, 2, 1, 0 ); // $ExpectError +dsyconvfRook.ndarray( 'upper', 'convert', 2, A, 2, 1, 0, E ); // $ExpectError +dsyconvfRook.ndarray( 'upper', 'convert', 2, A, 2, 1, 0, E, 1 ); // $ExpectError +dsyconvfRook.ndarray( 'upper', 'convert', 2, A, 2, 1, 0, E, 1, 0 ); // $ExpectError +dsyconvfRook.ndarray( 'upper', 'convert', 2, A, 2, 1, 0, E, 1, 0, IPIV ); // $ExpectError +dsyconvfRook.ndarray( 'upper', 'convert', 2, A, 2, 1, 0, E, 1, 0, IPIV, 1 ); // $ExpectError +dsyconvfRook.ndarray( 'upper', 'convert', 2, A, 2, 1, 0, E, 1, 0, IPIV, 1, 0, 0 ); // $ExpectError diff --git a/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/examples/c/Makefile b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/examples/c/Makefile new file mode 100644 index 000000000000..c8f8e9a1517b --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/examples/c/Makefile @@ -0,0 +1,146 @@ +#/ +# @license Apache-2.0 +# +# Copyright (c) 2026 The Stdlib Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +#/ + +# VARIABLES # + +ifndef VERBOSE + QUIET := @ +else + QUIET := +endif + +# Determine the OS ([1][1], [2][2]). +# +# [1]: https://en.wikipedia.org/wiki/Uname#Examples +# [2]: http://stackoverflow.com/a/27776822/2225624 +OS ?= $(shell uname) +ifneq (, $(findstring MINGW,$(OS))) + OS := WINNT +else +ifneq (, $(findstring MSYS,$(OS))) + OS := WINNT +else +ifneq (, $(findstring CYGWIN,$(OS))) + OS := WINNT +else +ifneq (, $(findstring Windows_NT,$(OS))) + OS := WINNT +endif +endif +endif +endif + +# Define the program used for compiling C source files: +ifdef C_COMPILER + CC := $(C_COMPILER) +else + CC := gcc +endif + +# Define the command-line options when compiling C files: +CFLAGS ?= \ + -std=c99 \ + -O3 \ + -Wall \ + -pedantic + +# Determine whether to generate position independent code ([1][1], [2][2]). +# +# [1]: https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#Code-Gen-Options +# [2]: http://stackoverflow.com/questions/5311515/gcc-fpic-option +ifeq ($(OS), WINNT) + fPIC ?= +else + fPIC ?= -fPIC +endif + +# List of includes (e.g., `-I /foo/bar -I /beep/boop/include`): +INCLUDE ?= + +# List of source files: +SOURCE_FILES ?= + +# List of libraries (e.g., `-lopenblas -lpthread`): +LIBRARIES ?= + +# List of library paths (e.g., `-L /foo/bar -L /beep/boop`): +LIBPATH ?= + +# List of C targets: +c_targets := example.out + + +# RULES # + +#/ +# Compiles source files. +# +# @param {string} [C_COMPILER] - C compiler (e.g., `gcc`) +# @param {string} [CFLAGS] - C compiler options +# @param {(string|void)} [fPIC] - compiler flag determining whether to generate position independent code (e.g., `-fPIC`) +# @param {string} [INCLUDE] - list of includes (e.g., `-I /foo/bar -I /beep/boop/include`) +# @param {string} [SOURCE_FILES] - list of source files +# @param {string} [LIBPATH] - list of library paths (e.g., `-L /foo/bar -L /beep/boop`) +# @param {string} [LIBRARIES] - list of libraries (e.g., `-lopenblas -lpthread`) +# +# @example +# make +# +# @example +# make all +#/ +all: $(c_targets) + +.PHONY: all + +#/ +# Compiles C source files. +# +# @private +# @param {string} CC - C compiler (e.g., `gcc`) +# @param {string} CFLAGS - C compiler options +# @param {(string|void)} fPIC - compiler flag determining whether to generate position independent code (e.g., `-fPIC`) +# @param {string} INCLUDE - list of includes (e.g., `-I /foo/bar`) +# @param {string} SOURCE_FILES - list of source files +# @param {string} LIBPATH - list of library paths (e.g., `-L /foo/bar`) +# @param {string} LIBRARIES - list of libraries (e.g., `-lopenblas`) +#/ +$(c_targets): %.out: %.c + $(QUIET) $(CC) $(CFLAGS) $(fPIC) $(INCLUDE) -o $@ $(SOURCE_FILES) $< $(LIBPATH) -lm $(LIBRARIES) + +#/ +# Runs compiled examples. +# +# @example +# make run +#/ +run: $(c_targets) + $(QUIET) ./$< + +.PHONY: run + +#/ +# Removes generated files. +# +# @example +# make clean +#/ +clean: + $(QUIET) -rm -f *.o *.out + +.PHONY: clean diff --git a/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/examples/c/example.c b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/examples/c/example.c new file mode 100644 index 000000000000..2825a63be183 --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/examples/c/example.c @@ -0,0 +1,49 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#include "stdlib/lapack/base/dsyconvf_rook.h" +#include "stdlib/lapack/base/shared.h" +#include +#include +#include + +int main( void ) { + // Upper rook-factor storage; 999 is an untouched opposite-triangle guard: + double A[] = { 0.0, 2.0, 999.0, 0.0 }; + double E[] = { -9.0, -9.0 }; + const LAPACK_INT IPIV[] = { -1, -2 }; + LAPACK_INT info; + + // Convert the genuine 2x2 block without changing signed 1-based pivots: + info = API_SUFFIX(c_dsyconvf_rook)( LAPACK_ROW_MAJOR, LAPACK_UPPER_TRIANGLE, 'C', 2, A, 2, E, IPIV ); + if ( info != 0 || A[ 1 ] != 0.0 || E[ 0 ] != 0.0 || signbit( E[ 0 ] ) || E[ 1 ] != 2.0 ) { + fprintf( stderr, "Unexpected conversion result.\n" ); + return EXIT_FAILURE; + } + printf( "Converted A: %g, %g, %g, %g\n", A[ 0 ], A[ 1 ], A[ 2 ], A[ 3 ] ); + printf( "Extracted E: %g, %g\n", E[ 0 ], E[ 1 ] ); + + // Revert with row and column strides expressed in elements: + info = API_SUFFIX(c_dsyconvf_rook_ndarray)( LAPACK_UPPER_TRIANGLE, 'R', 2, A, 2, 1, 0, E, 1, 0, IPIV, 1, 0 ); + if ( info != 0 || A[ 1 ] != 2.0 || A[ 2 ] != 999.0 || E[ 1 ] != 2.0 ) { + fprintf( stderr, "Unexpected reversion result.\n" ); + return EXIT_FAILURE; + } + printf( "Reverted A: %g, %g, %g, %g\n", A[ 0 ], A[ 1 ], A[ 2 ], A[ 3 ] ); + return EXIT_SUCCESS; +} diff --git a/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/examples/index.js b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/examples/index.js new file mode 100644 index 000000000000..a2a9977c14e5 --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/examples/index.js @@ -0,0 +1,52 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +var Float64Array = require( '@stdlib/array/float64' ); +var Int32Array = require( '@stdlib/array/int32' ); +var dsyconvfRook = require( './../lib' ); + +// Upper-triangular rook storage of a symmetric indefinite 2x2 block: +var A = new Float64Array( [ 0.0, 2.0, 999.0, 0.0 ] ); +var E = new Float64Array( [ -9.0, -9.0 ] ); + +// Keep the distinct negative LAPACK pivots unchanged and 1-based: +var IPIV = new Int32Array( [ -1, -2 ] ); + +var info = dsyconvfRook( 'row-major', 'upper', 'convert', 2, A, 2, E, IPIV ); +if ( info !== 0 || A[ 1 ] !== 0.0 || E[ 0 ] !== 0.0 || E[ 1 ] !== 2.0 ) { + throw new Error( 'Unexpected conversion result.' ); +} +console.log( 'Converted A: %s', A.join( ', ' ) ); +console.log( 'Extracted E: %s', E.join( ', ' ) ); + +// Reversion restores the off-diagonal value and preserves E and IPIV: +info = dsyconvfRook( 'row-major', 'upper', 'revert', 2, A, 2, E, IPIV ); +if ( + info !== 0 || + A[ 1 ] !== 2.0 || + A[ 2 ] !== 999.0 || + E[ 1 ] !== 2.0 || + IPIV[ 0 ] !== -1 || + IPIV[ 1 ] !== -2 +) { + throw new Error( 'Unexpected reversion result.' ); +} +console.log( 'Reverted A: %s', A.join( ', ' ) ); +console.log( 'Unchanged pivots: %s', IPIV.join( ', ' ) ); diff --git a/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/include.gypi b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/include.gypi new file mode 100644 index 000000000000..dcb556d250e8 --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/include.gypi @@ -0,0 +1,70 @@ +# @license Apache-2.0 +# +# Copyright (c) 2026 The Stdlib Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# A GYP include file for building a Node.js native add-on. +# +# Note that nesting variables is required due to how GYP processes a configuration. Any variables defined within a nested 'variables' section is defined in the outer scope. Thus, conditions in the outer variable scope are free to use these variables without running into "variable undefined" errors. +# +# Main documentation: +# +# [1]: https://gyp.gsrc.io/docs/InputFormatReference.md +# [2]: https://gyp.gsrc.io/docs/UserDocumentation.md +# +# Variable nesting hacks: +# +# [3]: https://chromium.googlesource.com/external/skia/gyp/+/master/common_variables.gypi +# [4]: https://src.chromium.org/viewvc/chrome/trunk/src/build/common.gypi?revision=127004 +{ + # Define variables to be used throughout the configuration for all targets: + 'variables': { + 'variables': { + # Host BLAS library (to override -Dblas=): + 'blas%': '', + + # Path to BLAS library (to override -Dblas_dir=): + 'blas_dir%': '', + }, # end variables + + # Source directory: + 'src_dir': './src', + + # Include directories: + 'include_dirs': [ + '<@(blas_dir)', + '1; read-only IPIV may broadcast +* when its repeated signed, one-based pivot is structurally valid. +* +* All accessed indices must be nonnegative and representable in LAPACK_INT +* and in PTRDIFF_MAX divided by the corresponding element size. Used DSWAP +* counts, strides, and post-iteration endpoints must fit configured CBLAS_INT; +* conservative rejection ensures both portable C and Fortran dependency safety. +* Sufficient allocated, disjoint physical storage remains a caller precondition. +* +* Returns zero on success or a negative one-based argument position. Invalid +* matrix collision maps to -6; malformed pivots map to -11. Scalar validation +* precedes the N=0 return, which does not access buffers or unused metadata. +*/ +LAPACK_INT API_SUFFIX(c_dsyconvf_rook_ndarray)( const LAPACK_UPLO uplo, const char way, const LAPACK_INT N, double *A, const LAPACK_INT strideA1, const LAPACK_INT strideA2, const LAPACK_INT offsetA, double *E, const LAPACK_INT strideE, const LAPACK_INT offsetE, const LAPACK_INT *IPIV, const LAPACK_INT strideIPIV, const LAPACK_INT offsetIPIV ); + +#ifdef __cplusplus +} +#endif + +#endif // !STDLIB_LAPACK_BASE_DSYCONVF_ROOK_H diff --git a/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/lib/base.js b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/lib/base.js new file mode 100644 index 000000000000..78acb4b6a3ec --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/lib/base.js @@ -0,0 +1,181 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +// MODULES // + +var dswap = require( '@stdlib/blas/base/dswap' ).ndarray; + + +// FUNCTIONS // + +/** +* Swaps stored row fragments in their existing sequential order. +* @private +* @param {Float64Array} A - matrix +* @param {integer} s1 - row stride +* @param {integer} s2 - column stride +* @param {integer} oa - matrix offset +* @param {integer} row - first row +* @param {integer} target - second row +* @param {NonNegativeInteger} start - first column +* @param {NonNegativeInteger} count - fragment length +* @returns {void} +*/ +function swap( A, s1, s2, oa, row, target, start, count ) { // eslint-disable-line max-params + if ( count > 0 && row !== target ) { + dswap( count, A, s2, oa+(row*s1)+(start*s2), A, s2, oa+(target*s1)+(start*s2) ); + } +} + + +// MAIN // + +/** +* Converts or reverts validated symmetric indefinite rook factor storage. +* +* Adapted from Reference-LAPACK DSYCONVF_ROOK at commit 2e5d9c1273435fbd953adb294ed603e4789afaba. See NOTICE for retained BSD copyright, conditions and disclaimer. +* +* @private +* @param {integer} u - triangle enum +* @param {integer} w - C/R direction enum +* @param {PositiveInteger} N - matrix order +* @param {Float64Array} A - factor matrix +* @param {integer} s1 - row stride +* @param {integer} s2 - column stride +* @param {integer} oa - matrix offset +* @param {Float64Array} E - off-diagonal storage +* @param {integer} se - storage stride +* @param {integer} oe - storage offset +* @param {Int32Array} P - signed one-based pivots +* @param {integer} sp - pivot stride +* @param {integer} op - pivot offset +* @returns {integer} zero success status +*/ +function base( u, w, N, A, s1, s2, oa, E, se, oe, P, sp, op ) { // eslint-disable-line max-params + var p; + var q; + var i; + if ( w === 67 ) { + if ( u === 121 ) { + i = N-1; + E[ oe ] = 0.0; + while ( i > 0 ) { + if ( P[ op+(i*sp) ] < 0 ) { + E[ oe+(i*se) ] = A[ oa+((i-1)*s1)+(i*s2) ]; + E[ oe+((i-1)*se) ] = 0.0; + A[ oa+((i-1)*s1)+(i*s2) ] = 0.0; + i -= 1; + } else { + E[ oe+(i*se) ] = 0.0; + } + i -= 1; + } + i = N-1; + while ( i >= 0 ) { + p = P[ op+(i*sp) ]; + if ( p > 0 ) { + swap( A, s1, s2, oa, i, p-1, i+1, N-i-1 ); + } else { + q = P[ op+((i-1)*sp) ]; + swap( A, s1, s2, oa, i, -p-1, i+1, N-i-1 ); + swap( A, s1, s2, oa, i-1, -q-1, i+1, N-i-1 ); + i -= 1; + } + i -= 1; + } + } else { + i = 0; + E[ oe+((N-1)*se) ] = 0.0; + while ( i < N ) { + if ( i < N-1 && P[ op+(i*sp) ] < 0 ) { + E[ oe+(i*se) ] = A[ oa+((i+1)*s1)+(i*s2) ]; + E[ oe+((i+1)*se) ] = 0.0; + A[ oa+((i+1)*s1)+(i*s2) ] = 0.0; + i += 1; + } else { + E[ oe+(i*se) ] = 0.0; + } + i += 1; + } + i = 0; + while ( i < N ) { + p = P[ op+(i*sp) ]; + if ( p > 0 ) { + swap( A, s1, s2, oa, i, p-1, 0, i ); + } else { + q = P[ op+((i+1)*sp) ]; + swap( A, s1, s2, oa, i, -p-1, 0, i ); + swap( A, s1, s2, oa, i+1, -q-1, 0, i ); + i += 1; + } + i += 1; + } + } + } else if ( u === 121 ) { + i = 0; + while ( i < N ) { + p = P[ op+(i*sp) ]; + if ( p > 0 ) { + swap( A, s1, s2, oa, i, p-1, i+1, N-i-1 ); + } else { + i += 1; + p = P[ op+(i*sp) ]; + q = P[ op+((i-1)*sp) ]; + swap( A, s1, s2, oa, i-1, -q-1, i+1, N-i-1 ); + swap( A, s1, s2, oa, i, -p-1, i+1, N-i-1 ); + } + i += 1; + } + i = N-1; + while ( i > 0 ) { + if ( P[ op+(i*sp) ] < 0 ) { + A[ oa+((i-1)*s1)+(i*s2) ] = E[ oe+(i*se) ]; + i -= 1; + } + i -= 1; + } + } else { + i = N-1; + while ( i >= 0 ) { + p = P[ op+(i*sp) ]; + if ( p > 0 ) { + swap( A, s1, s2, oa, i, p-1, 0, i ); + } else { + i -= 1; + p = P[ op+(i*sp) ]; + q = P[ op+((i+1)*sp) ]; + swap( A, s1, s2, oa, i+1, -q-1, 0, i ); + swap( A, s1, s2, oa, i, -p-1, 0, i ); + } + i -= 1; + } + i = 0; + while ( i < N-1 ) { + if ( P[ op+(i*sp) ] < 0 ) { + A[ oa+((i+1)*s1)+(i*s2) ] = E[ oe+(i*se) ]; + i += 1; + } + i += 1; + } + } + return 0; +} + +module.exports = base; diff --git a/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/lib/can_use_native.js b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/lib/can_use_native.js new file mode 100644 index 000000000000..09b136dbbef6 --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/lib/can_use_native.js @@ -0,0 +1,76 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +// FUNCTIONS // + +/** +* Checks the native signed32 active envelope. +* @private +* @param {PositiveInteger} N - order +* @param {integer} s1 - first stride +* @param {integer} s2 - second stride +* @param {integer} offset - offset +* @returns {boolean} whether metadata fits +*/ +function envelope( N, s1, s2, offset ) { + var lo; + var hi; + var a; + var b; + a = (N-1)*s1; + b = (N-1)*s2; + lo = offset + ((a < 0) ? a : 0) + ((b < 0) ? b : 0); + hi = offset + ((a > 0) ? a : 0) + ((b > 0) ? b : 0); + return lo >= 0 && hi <= 2147483647; +} + + +// MAIN // + +/** +* Restricts dispatch to the native bridge's conservative signed32 domain. +* @private +* @param {ArrayLike} args - already validated normalized arguments +* @returns {boolean} whether native metadata is representable +*/ +function canUseNative( args ) { + var indices; + var x; + var i; + var N; + N = args[2]; + if ( N > 2147483647 ) { + return false; + } + indices = [ 4, 5, 6, 8, 9, 11, 12 ]; + for ( i = 0; i < indices.length; i++ ) { + x = args[ indices[i] ]; + if ( x < -2147483647 || x > 2147483647 || (N > 1 && ( x*(N-1) < -2147483647 || x*(N-1) > 2147483647 )) ) { + return false; + } + } + // Full A bounds are validated, but the CBLAS swap also advances after its last access. + if ( N > 1 && (args[5]*N < -2147483647 || args[5]*N > 2147483647) ) { + return false; + } + return envelope( N, args[4], args[5], args[6] ) && envelope( N, args[8], 0, args[9] ) && envelope( N, args[11], 0, args[12] ); +} + +module.exports = canUseNative; diff --git a/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/lib/factory.js b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/lib/factory.js new file mode 100644 index 000000000000..e30d4e6690de --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/lib/factory.js @@ -0,0 +1,132 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +// MODULES // + +var isSafeInteger = require( '@stdlib/assert/is-safe-integer' ).isPrimitive; +var setReadOnly = require( '@stdlib/utils/define-nonenumerable-read-only-property' ); +var validate = require( './validate.js' ); + + +// FUNCTIONS // + +/** +* Validates scalar selectors and the order before examining buffers. +* @private +* @param {string} uplo - triangle +* @param {string} way - conversion direction +* @param {NonNegativeInteger} N - order +* @throws {TypeError} invalid selectors +* @throws {RangeError} invalid order +* @returns {Array} normalized selector enums +*/ +function scalars( uplo, way, N ) { + if ( uplo !== 'upper' && uplo !== 'lower' ) { + throw new TypeError( 'invalid argument. Triangle must be upper or lower.' ); + } + if ( way !== 'convert' && way !== 'revert' ) { + throw new TypeError( 'invalid argument. Direction must be convert or revert.' ); + } + if ( !isSafeInteger( N ) || N < 0 || N > 2147483647 ) { + throw new RangeError( 'invalid argument. Order must be a nonnegative signed32 integer.' ); + } + return [ (uplo === 'upper') ? 121 : 122, (way === 'convert') ? 67 : 82 ]; +} + + +// MAIN // + +/** +* Creates the proposed public main and alternative-indexing interfaces. +* @private +* @param {Function} base - validated normalized kernel +* @returns {Function} public interfaces +*/ +function factory( base ) { + setReadOnly( dsyconvfRook, 'ndarray', ndarray ); + return dsyconvfRook; + + /** + * Converts or reverts symmetric indefinite rook factor storage. + * @private + * @param {string} order - storage layout + * @param {string} uplo - stored triangle + * @param {string} way - convert or revert + * @param {NonNegativeInteger} N - order + * @param {Float64Array} A - factor matrix + * @param {PositiveInteger} LDA - leading dimension + * @param {Float64Array} E - off-diagonal storage + * @param {Int32Array} IPIV - signed one-based rook pivots + * @throws {TypeError} invalid selectors or buffers + * @throws {RangeError} invalid metadata or pivots + * @returns {integer} zero success status + */ + function dsyconvfRook( order, uplo, way, N, A, LDA, E, IPIV ) { // eslint-disable-line max-params + var sa1; + var sa2; + var s; + if ( order !== 'row-major' && order !== 'column-major' ) { + throw new TypeError( 'invalid argument. Order must be row-major or column-major.' ); + } + s = scalars( uplo, way, N ); + if ( !isSafeInteger( LDA ) || LDA < 1 || LDA < N ) { + throw new RangeError( 'invalid argument. Leading dimension must be a safe integer at least max(1,N).' ); + } + if ( N === 0 ) { + return 0; + } + sa1 = (order === 'column-major') ? 1 : LDA; + sa2 = (order === 'column-major') ? LDA : 1; + validate( s[0], s[1], N, A, sa1, sa2, 0, E, 1, 0, IPIV, 1, 0 ); + return base( s[0], s[1], N, A, sa1, sa2, 0, E, 1, 0, IPIV, 1, 0 ); + } + + /** + * Converts or reverts factor storage using independent indexing strides. + * @private + * @param {string} uplo - stored triangle + * @param {string} way - convert or revert + * @param {NonNegativeInteger} N - order + * @param {Float64Array} A - factor matrix + * @param {integer} sa1 - row stride + * @param {integer} sa2 - column stride + * @param {integer} oa - matrix offset + * @param {Float64Array} E - off-diagonal storage + * @param {integer} se - storage stride + * @param {integer} oe - storage offset + * @param {Int32Array} P - signed one-based rook pivots + * @param {integer} sp - pivot stride + * @param {integer} op - pivot offset + * @throws {TypeError} invalid selectors or buffers + * @throws {RangeError} invalid metadata or pivots + * @returns {integer} zero success status + */ + function ndarray( uplo, way, N, A, sa1, sa2, oa, E, se, oe, P, sp, op ) { // eslint-disable-line max-params + var s; + s = scalars( uplo, way, N ); + if ( N === 0 ) { + return 0; + } + validate( s[0], s[1], N, A, sa1, sa2, oa, E, se, oe, P, sp, op ); + return base( s[0], s[1], N, A, sa1, sa2, oa, E, se, oe, P, sp, op ); + } +} + +module.exports = factory; diff --git a/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/lib/index.js b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/lib/index.js new file mode 100644 index 000000000000..7abefded4218 --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/lib/index.js @@ -0,0 +1,34 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +/** +* Convert or revert symmetric indefinite rook factor storage. +* +* @module @stdlib/lapack/base/dsyconvf-rook +*/ + +'use strict'; + +var resolve = require( 'path' ).resolve; +var tryRequire = require( '@stdlib/utils/try-require' ); + +var main = tryRequire( resolve( __dirname, './native.js' ) ); +if ( main instanceof Error ) { + main = require( './main.js' ); +} +module.exports = main; diff --git a/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/lib/main.js b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/lib/main.js new file mode 100644 index 000000000000..72ce4a14cc58 --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/lib/main.js @@ -0,0 +1,26 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +var factory = require( './factory.js' ); +var base = require( './base.js' ); + +var main = factory( base ); + +module.exports = main; diff --git a/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/lib/native.js b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/lib/native.js new file mode 100644 index 000000000000..7905498784e0 --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/lib/native.js @@ -0,0 +1,42 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +var factory = require( './factory.js' ); +var base = require( './base.js' ); +var canUseNative = require( './can_use_native.js' ); +var addon = require( './../src/addon.node' ); +var main; + +/** +* Dispatches safe typed views to the addon. +* +* @private +* @returns {number} zero success status +*/ +function dispatch() { + if ( canUseNative( arguments ) ) { + return addon.apply( null, arguments ); + } + return base.apply( null, arguments ); +} + +main = factory( dispatch ); + +module.exports = main; diff --git a/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/lib/validate.js b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/lib/validate.js new file mode 100644 index 000000000000..23e88f0101e9 --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/lib/validate.js @@ -0,0 +1,218 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +// MODULES // + +var Float64Array = require( '@stdlib/array/float64' ); +var ArrayBuffer = require( '@stdlib/array/buffer' ); +var Symbol = require( '@stdlib/symbol/ctor' ); +var isFloat64Array = require( '@stdlib/assert/is-float64array' ); +var isInt32Array = require( '@stdlib/assert/is-int32array' ); +var isSafeInteger = require( '@stdlib/assert/is-safe-integer' ).isPrimitive; +var getPrototypeOf = require( '@stdlib/utils/get-prototype-of' ); +var descriptor = require( '@stdlib/utils/property-descriptor' ); + + +// VARIABLES // + +var proto = getPrototypeOf( Float64Array.prototype ); +var getLength = descriptor( proto, 'length' ).get; +var getBuffer = descriptor( proto, 'buffer' ).get; +var getByteOffset = descriptor( proto, 'byteOffset' ).get; +var getTag = Symbol.toStringTag && descriptor( proto, Symbol.toStringTag ).get; +var getBufferLength = descriptor( ArrayBuffer.prototype, 'byteLength' ).get; +var MAX = 9007199254740991; + + +// FUNCTIONS // + +/** +* Adds safe integers without permitting an inexact indexed result. +* @private +* @param {integer} a - first integer +* @param {integer} b - second integer +* @throws {RangeError} inexact sum +* @returns {integer} sum +*/ +function add( a, b ) { + if ( (b > 0 && a > MAX-b) || (b < 0 && a < -MAX-b) ) { + throw new RangeError( 'invalid argument. Indexed arithmetic must be exact.' ); + } + return a+b; +} + +/** +* Finds the greatest common divisor of positive safe integers. +* @private +* @param {PositiveInteger} a - first integer +* @param {PositiveInteger} b - second integer +* @returns {PositiveInteger} greatest common divisor +*/ +function gcd( a, b ) { + var r; + while ( b !== 0 ) { + r = a % b; + a = b; + b = r; + } + return a; +} + +/** +* Checks an injective matrix view and captures its indexed-byte envelope. +* @private +* @param {TypedArray} data - typed view +* @param {NonNegativeInteger} N - dimension +* @param {integer} s1 - first stride +* @param {integer} s2 - second stride +* @param {integer} offset - offset +* @param {boolean} matrix - whether the view is a matrix +* @param {boolean} mutable - whether indexed writes are allowed +* @param {string} dtype - required intrinsic typed-array name +* @throws {TypeError} invalid buffer +* @throws {RangeError} invalid metadata or storage +* @returns {Array} buffer and half-open byte envelope +*/ +function view( data, N, s1, s2, offset, matrix, mutable, dtype ) { // eslint-disable-line max-params + var buffer; + var bytes; + var begin; + var end; + var lo; + var hi; + var a; + var b; + var g; + if ( !( (dtype === 'Float64Array') ? isFloat64Array( data ) : isInt32Array( data ) ) || (getTag && getTag.call( data ) !== dtype) ) { + throw new TypeError( 'invalid argument. Buffers must have the documented typed-array types.' ); + } + buffer = getBuffer.call( data ); + + // Intrinsic branding rejects shared storage, including cloned identities. + getBufferLength.call( buffer ); + if ( !isSafeInteger( s1 ) || !isSafeInteger( s2 ) || !isSafeInteger( offset ) ) { + throw new RangeError( 'invalid argument. Strides and offsets must be safe integers.' ); + } + if ( N > 1 && ( (matrix && (s1 === 0 || s2 === 0)) || (mutable && !matrix && s1 === 0) ) ) { + throw new RangeError( 'invalid argument. Mutable indexed views must be injective.' ); + } + if ( matrix && N > 1 ) { + g = gcd( (s1 < 0) ? -s1 : s1, (s2 < 0) ? -s2 : s2 ); + if ( ( ((s1 < 0) ? -s1 : s1)/g < N ) && ( ((s2 < 0) ? -s2 : s2)/g < N ) ) { + throw new RangeError( 'invalid argument. Matrix indices must be injective.' ); + } + } + a = (N-1)*s1; + b = ( matrix ) ? (N-1)*s2 : 0; + if ( !isSafeInteger( a ) || !isSafeInteger( b ) ) { + throw new RangeError( 'invalid argument. Indexed products must be exact.' ); + } + lo = add( add( offset, (a < 0) ? a : 0 ), (b < 0) ? b : 0 ); + hi = add( add( offset, (a > 0) ? a : 0 ), (b > 0) ? b : 0 ); + if ( lo < 0 || hi >= getLength.call( data ) ) { + throw new RangeError( 'invalid argument. Insufficient indexed storage.' ); + } + bytes = ( dtype === 'Float64Array' ) ? 8 : 4; + begin = lo*bytes; + end = (hi+1)*bytes; + if ( !isSafeInteger( begin ) || !isSafeInteger( end ) ) { + throw new RangeError( 'invalid argument. Indexed byte envelope must be exact.' ); + } + return [ buffer, add( getByteOffset.call( data ), begin ), add( getByteOffset.call( data ), end ) ]; +} + +/** +* Rejects overlapping indexed-byte envelopes. +* @private +* @param {Array} a - first envelope +* @param {Array} b - second envelope +* @throws {RangeError} overlap +* @returns {void} +*/ +function disjoint( a, b ) { + if ( a[0] === b[0] && a[1] < b[2] && b[1] < a[2] ) { + throw new RangeError( 'invalid argument. Indexed A, E and IPIV envelopes must be disjoint.' ); + } +} + + +// MAIN // + +/** +* Validates normalized active views and complete signed LAPACK pivots. +* @private +* @param {integer} u - triangle enum +* @param {integer} w - conversion enum +* @param {PositiveInteger} N - matrix order +* @param {Float64Array} A - matrix +* @param {integer} sa1 - row stride +* @param {integer} sa2 - column stride +* @param {integer} oa - matrix offset +* @param {Float64Array} E - off-diagonal storage +* @param {integer} se - storage stride +* @param {integer} oe - storage offset +* @param {Int32Array} P - signed one-based pivots +* @param {integer} sp - pivot stride +* @param {integer} op - pivot offset +* @throws {TypeError} invalid buffers +* @throws {RangeError} invalid metadata or pivots +* @returns {void} +*/ +function validate( u, w, N, A, sa1, sa2, oa, E, se, oe, P, sp, op ) { // eslint-disable-line max-params + var target; + var step; + var pair; + var ae; + var ee; + var pe; + var p; + var i; + var j; + ae = view( A, N, sa1, sa2, oa, true, true, 'Float64Array' ); + ee = view( E, N, se, 0, oe, false, true, 'Float64Array' ); + pe = view( P, N, sp, 0, op, false, false, 'Int32Array' ); + disjoint( ae, ee ); + disjoint( ae, pe ); + disjoint( ee, pe ); + step = ( u === 121 ) ? -1 : 1; + i = ( u === 121 ) ? N-1 : 0; + while ( i >= 0 && i < N ) { + p = P[ op+(i*sp) ]; + target = (p < 0) ? -p : p; + if ( p === 0 || target > N || ( (u === 121) ? target > i+1 : target < i+1 ) ) { + throw new RangeError( 'invalid argument. Invalid signed one-based pivot target.' ); + } + if ( p < 0 ) { + j = i+step; + if ( j < 0 || j >= N ) { + throw new RangeError( 'invalid argument. Incomplete two-by-two pivot block.' ); + } + pair = P[ op+(j*sp) ]; + target = -pair; + if ( pair >= 0 || target > N || ( (u === 121) ? target > i+1 : target < i+1 ) ) { + throw new RangeError( 'invalid argument. Invalid two-by-two pivot block.' ); + } + i = j; + } + i += step; + } +} + +module.exports = validate; diff --git a/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/manifest.json b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/manifest.json new file mode 100644 index 000000000000..a68b83d3c85c --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/manifest.json @@ -0,0 +1,89 @@ +{ + "options": { + "task": "build", + "wasm": false + }, + "fields": [ + { + "field": "src", + "resolve": true, + "relative": true + }, + { + "field": "include", + "resolve": true, + "relative": true + }, + { + "field": "libraries", + "resolve": false, + "relative": false + }, + { + "field": "libpath", + "resolve": true, + "relative": false + } + ], + "confs": [ + { + "task": "build", + "wasm": false, + "src": [ + "./src/dsyconvf_rook.c", + "./src/dsyconvf_rook_ndarray.c" + ], + "include": [ + "./include" + ], + "libraries": [], + "libpath": [], + "dependencies": [ + "@stdlib/lapack/base/shared", + "@stdlib/lapack/base/xerbla", + "@stdlib/blas/base/dswap", + "@stdlib/napi/export", + "@stdlib/napi/argv", + "@stdlib/napi/argv-float64array", + "@stdlib/napi/argv-int32array", + "@stdlib/napi/create-int32" + ] + }, + { + "task": "benchmark", + "wasm": false, + "src": [ + "./src/dsyconvf_rook.c", + "./src/dsyconvf_rook_ndarray.c" + ], + "include": [ + "./include" + ], + "libraries": [], + "libpath": [], + "dependencies": [ + "@stdlib/lapack/base/shared", + "@stdlib/lapack/base/xerbla", + "@stdlib/blas/base/dswap" + ] + }, + { + "task": "examples", + "wasm": false, + "src": [ + "./src/dsyconvf_rook.c", + "./src/dsyconvf_rook_ndarray.c" + ], + "include": [ + "./include" + ], + "libraries": [], + "libpath": [], + "dependencies": [ + "@stdlib/lapack/base/shared", + "@stdlib/lapack/base/xerbla", + "@stdlib/blas/base/dswap" + ] + } + ] +} diff --git a/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/package.json b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/package.json new file mode 100644 index 000000000000..3c3bca109b76 --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/package.json @@ -0,0 +1,81 @@ +{ + "name": "@stdlib/lapack/base/dsyconvf-rook", + "version": "0.0.0", + "description": "Convert or revert symmetric indefinite rook factor storage.", + "license": "Apache-2.0", + "author": { + "name": "The Stdlib Authors", + "url": "https://github.com/stdlib-js/stdlib/graphs/contributors" + }, + "contributors": [ + { + "name": "The Stdlib Authors", + "url": "https://github.com/stdlib-js/stdlib/graphs/contributors" + } + ], + "main": "./lib", + "browser": "./lib/main.js", + "gypfile": true, + "directories": { + "benchmark": "./benchmark", + "doc": "./docs", + "example": "./examples", + "include": "./include", + "lib": "./lib", + "src": "./src", + "test": "./test" + }, + "types": "./docs/types", + "scripts": {}, + "homepage": "https://github.com/stdlib-js/stdlib", + "repository": { + "type": "git", + "url": "git://github.com/stdlib-js/stdlib.git" + }, + "bugs": { + "url": "https://github.com/stdlib-js/stdlib/issues" + }, + "dependencies": {}, + "devDependencies": {}, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "keywords": [ + "stdlib", + "stdmath", + "mathematics", + "math", + "lapack", + "dsyconvf-rook", + "symmetric", + "indefinite", + "rook", + "pivot", + "factor", + "convert", + "revert", + "linear", + "algebra", + "subroutines", + "array", + "ndarray", + "matrix", + "float64", + "double", + "float64array", + "int32array" + ], + "__stdlib__": {} +} diff --git a/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/src/Makefile b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/src/Makefile new file mode 100644 index 000000000000..2caf905cedbe --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/src/Makefile @@ -0,0 +1,70 @@ +#/ +# @license Apache-2.0 +# +# Copyright (c) 2026 The Stdlib Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +#/ + +# VARIABLES # + +ifndef VERBOSE + QUIET := @ +else + QUIET := +endif + +# Determine the OS ([1][1], [2][2]). +# +# [1]: https://en.wikipedia.org/wiki/Uname#Examples +# [2]: http://stackoverflow.com/a/27776822/2225624 +OS ?= $(shell uname) +ifneq (, $(findstring MINGW,$(OS))) + OS := WINNT +else +ifneq (, $(findstring MSYS,$(OS))) + OS := WINNT +else +ifneq (, $(findstring CYGWIN,$(OS))) + OS := WINNT +else +ifneq (, $(findstring Windows_NT,$(OS))) + OS := WINNT +endif +endif +endif +endif + + +# RULES # + +#/ +# Removes generated files for building an add-on. +# +# @example +# make clean-addon +#/ +clean-addon: + $(QUIET) -rm -f *.o *.node + +.PHONY: clean-addon + +#/ +# Removes generated files. +# +# @example +# make clean +#/ +clean: clean-addon + +.PHONY: clean diff --git a/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/src/addon.c b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/src/addon.c new file mode 100644 index 000000000000..3e676c7ad575 --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/src/addon.c @@ -0,0 +1,228 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + + +#include "stdlib/lapack/base/dsyconvf_rook.h" +#include "stdlib/napi/export.h" +#include "stdlib/napi/argv.h" +#include "stdlib/napi/argv_float64array.h" +#include "stdlib/napi/argv_int32array.h" +#include "stdlib/napi/create_int32.h" +#include +#include +#include +#include + +/** +* Parses a finite integral Number without Node-API's silent integer truncation. +* @param env environment +* @param value numeric argument +* @param out integer output +* @return whether parsing succeeds +*/ +static int integer( napi_env env, napi_value value, int64_t *out ) { + napi_valuetype type; + double v; + if ( napi_typeof( env, value, &type ) != napi_ok || type != napi_number ) { + napi_throw_type_error( env, NULL, "invalid argument. Scalars must be Numbers." ); + return 0; + } + if ( napi_get_value_double( env, value, &v ) != napi_ok ) { + return 0; + } + if ( !(v >= -2147483647.0 && v <= 2147483647.0) ) { + napi_throw_range_error( env, NULL, "invalid argument. Native metadata must fit its conservative signed32 domain." ); + return 0; + } + *out = (int64_t)v; + if ( v != (double)*out ) { + napi_throw_range_error( env, NULL, "invalid argument. Metadata must be integral." ); + return 0; + } + return 1; +} + +/** +* Captures safe indexed bounds using exact signed64 arithmetic in a signed32 domain. +* @param N positive indexed order +* @param s1 first stride +* @param s2 second stride (zero for vectors) +* @param offset first indexed offset +* @param length intrinsic typed-array length +* @param lo minimum indexed element +* @param hi maximum indexed element +* @return whether bounds fit +*/ +static int bounds( int64_t N, int64_t s1, int64_t s2, int64_t offset, int64_t length, int64_t *lo, int64_t *hi ) { + int64_t a = (N-1)*s1; + int64_t b = (N-1)*s2; + if ( a < -INT64_C(2147483647) || a > INT64_C(2147483647) || b < -INT64_C(2147483647) || b > INT64_C(2147483647) ) { + return 0; + } + *lo = offset + ((a < 0) ? a : 0) + ((b < 0) ? b : 0); + *hi = offset + ((a > 0) ? a : 0) + ((b > 0) ? b : 0); + return *lo >= 0 && *hi <= INT64_C(2147483647) && *hi < length; +} + +/** +* Rejects full square matrix collisions before allocating pivot workspace. +* @param N matrix order +* @param s1 row stride +* @param s2 column stride +* @return whether the full indexed square is injective +*/ +static int injective( int64_t N, int64_t s1, int64_t s2 ) { + uint64_t a; + uint64_t b; + uint64_t g; + uint64_t r; + if ( N == 1 ) { + return 1; + } + if ( s1 == 0 || s2 == 0 ) { + return 0; + } + a = (uint64_t)((s1 < 0) ? -s1 : s1); + b = (uint64_t)((s2 < 0) ? -s2 : s2); + g = a; + r = b; + while ( r != 0 ) { + uint64_t next = g % r; + g = r; + r = next; + } + return a/g >= (uint64_t)N || b/g >= (uint64_t)N; +} + +/** +* Compares physical indexed-byte envelopes independently of buffer identity. +* @param env environment +* @param a first typed array +* @param alo first minimum index +* @param ahi first maximum index +* @param asize first element size +* @param b second typed array +* @param blo second minimum index +* @param bhi second maximum index +* @param bsize second element size +* @return whether envelopes overlap or metadata extraction fails +*/ +static int overlaps( napi_env env, napi_value a, int64_t alo, int64_t ahi, size_t asize, napi_value b, int64_t blo, int64_t bhi, size_t bsize ) { + void *adata; + void *bdata; + uintptr_t abase; + uintptr_t bbase; + uintptr_t al; + uintptr_t ah; + uintptr_t bl; + uintptr_t bh; + if ( napi_get_typedarray_info( env, a, NULL, NULL, &adata, NULL, NULL ) != napi_ok || napi_get_typedarray_info( env, b, NULL, NULL, &bdata, NULL, NULL ) != napi_ok ) { + return 1; + } + if ( adata == NULL || bdata == NULL ) { + return 1; + } + abase = (uintptr_t)adata; + bbase = (uintptr_t)bdata; + // Typed-array data pointers already include each view's byte offset. + if ( (uintmax_t)ahi+1 > UINTPTR_MAX/asize || (uintmax_t)bhi+1 > UINTPTR_MAX/bsize ) { + return 1; + } + ah = ((uintptr_t)ahi+1)*asize; + bh = ((uintptr_t)bhi+1)*bsize; + if ( abase > UINTPTR_MAX-ah || bbase > UINTPTR_MAX-bh ) { + return 1; + } + al = abase + (uintptr_t)alo*asize; + ah += abase; + bl = bbase + (uintptr_t)blo*bsize; + bh += bbase; + return al < bh && bl < ah; +} + +/** +* Converts or reverts validated native rook factor storage. +* @param env environment +* @param info invocation data +* @return zero success status +*/ +static napi_value addon( napi_env env, napi_callback_info info ) { + LAPACK_INT *pivots; + LAPACK_INT result; + int64_t u; + int64_t w; + int64_t N; + int64_t sa1; + int64_t sa2; + int64_t oa; + int64_t se; + int64_t oe; + int64_t sp; + int64_t op; + int64_t alo; + int64_t ahi; + int64_t elo; + int64_t ehi; + int64_t plo; + int64_t phi; + int64_t i; + STDLIB_NAPI_ARGV( env, info, argv, argc, 13 ); + if ( !integer( env, argv[0], &u ) || !integer( env, argv[1], &w ) || !integer( env, argv[2], &N ) ) { + return NULL; + } + if ( (u != LAPACK_UPPER_TRIANGLE && u != LAPACK_LOWER_TRIANGLE) || (w != 'C' && w != 'R') || N < 0 ) { + napi_throw_range_error( env, NULL, "invalid argument. Invalid triangle, direction or order." ); + return NULL; + } + if ( N == 0 ) { + STDLIB_NAPI_CREATE_INT32( env, 0, zero ); + return zero; + } + STDLIB_NAPI_ARGV_FLOAT64ARRAY( env, A, alen, argv, 3 ); + STDLIB_NAPI_ARGV_FLOAT64ARRAY( env, E, elen, argv, 7 ); + STDLIB_NAPI_ARGV_INT32ARRAY( env, P, plen, argv, 10 ); + if ( !integer( env, argv[4], &sa1 ) || !integer( env, argv[5], &sa2 ) || !integer( env, argv[6], &oa ) || !integer( env, argv[8], &se ) || !integer( env, argv[9], &oe ) || !integer( env, argv[11], &sp ) || !integer( env, argv[12], &op ) ) { + return NULL; + } + if ( !injective( N, sa1, sa2 ) || (N > 1 && se == 0) || !bounds( N, sa1, sa2, oa, alen, &alo, &ahi ) || !bounds( N, se, 0, oe, elen, &elo, &ehi ) || !bounds( N, sp, 0, op, plen, &plo, &phi ) || overlaps( env, argv[3], alo, ahi, 8, argv[7], elo, ehi, 8 ) || overlaps( env, argv[3], alo, ahi, 8, argv[10], plo, phi, 4 ) || overlaps( env, argv[7], elo, ehi, 8, argv[10], plo, phi, 4 ) ) { + napi_throw_range_error( env, NULL, "invalid argument. Insufficient or overlapping indexed storage." ); + return NULL; + } + if ( (uintmax_t)N > SIZE_MAX/sizeof( LAPACK_INT ) ) { + napi_throw_range_error( env, NULL, "invalid argument. Pivot workspace is too large." ); + return NULL; + } + pivots = (LAPACK_INT *)malloc( (size_t)N*sizeof( LAPACK_INT ) ); + if ( pivots == NULL ) { + napi_throw_error( env, NULL, "allocation failed. Unable to allocate pivot workspace." ); + return NULL; + } + for ( i = 0; i < N; i++ ) { + pivots[i] = (LAPACK_INT)P[ op+(i*sp) ]; + } + result = API_SUFFIX(c_dsyconvf_rook_ndarray)( (LAPACK_UPLO)u, (char)w, (LAPACK_INT)N, A, (LAPACK_INT)sa1, (LAPACK_INT)sa2, (LAPACK_INT)oa, E, (LAPACK_INT)se, (LAPACK_INT)oe, pivots, 1, 0 ); + free( pivots ); + if ( result != 0 ) { + napi_throw_range_error( env, NULL, "invalid argument. Invalid metadata or signed rook pivots." ); + return NULL; + } + STDLIB_NAPI_CREATE_INT32( env, 0, out ); + return out; +} + +STDLIB_NAPI_MODULE_EXPORT_FCN( addon ) diff --git a/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/src/dsyconvf_rook.c b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/src/dsyconvf_rook.c new file mode 100644 index 000000000000..b07424694b9b --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/src/dsyconvf_rook.c @@ -0,0 +1,79 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#include "stdlib/lapack/base/dsyconvf_rook.h" +#include "validation.h" + +/** +* Converts or reverts the storage of a symmetric rook-pivoted factorization. +* +* @param layout matrix storage layout +* @param uplo stored matrix triangle +* @param way 'C'/'c' to convert or 'R'/'r' to revert +* @param N matrix order +* @param A input/output factor storage +* @param LDA leading dimension, at least max(1,N) +* @param E extracted or supplied off-diagonal entries of D +* @param IPIV read-only, signed one-based LAPACK rook pivots +* @return zero or a negative one-based argument position +*/ +LAPACK_INT API_SUFFIX(c_dsyconvf_rook)( const LAPACK_LAYOUT layout, const LAPACK_UPLO uplo, const char way, const LAPACK_INT N, double *A, const LAPACK_INT LDA, double *E, const LAPACK_INT *IPIV ) { + LAPACK_INT strideA1; + LAPACK_INT strideA2; + LAPACK_INT info; + + if ( layout != LAPACK_ROW_MAJOR && layout != LAPACK_COL_MAJOR ) { + return dsyconvf_rook_error( "c_dsyconvf_rook", -1 ); + } + if ( uplo != LAPACK_UPPER_TRIANGLE && uplo != LAPACK_LOWER_TRIANGLE ) { + return dsyconvf_rook_error( "c_dsyconvf_rook", -2 ); + } + if ( way != 'C' && way != 'c' && way != 'R' && way != 'r' ) { + return dsyconvf_rook_error( "c_dsyconvf_rook", -3 ); + } + if ( N < 0 ) { + return dsyconvf_rook_error( "c_dsyconvf_rook", -4 ); + } + if ( LDA < 1 || LDA < N ) { + return dsyconvf_rook_error( "c_dsyconvf_rook", -6 ); + } + if ( N == 0 ) { + return 0; + } + if ( layout == LAPACK_COL_MAJOR ) { + strideA1 = 1; + strideA2 = LDA; + } else { + strideA1 = LDA; + strideA2 = 1; + } + info = dsyconvf_rook_validate( uplo, way, N, A, strideA1, strideA2, 0, E, 1, 0, IPIV, 1, 0 ); + if ( info != 0 ) { + if ( info == -4 ) { + info = -5; + } else if ( info == -5 || info == -6 || info == -7 ) { + info = -6; + } else if ( info >= -10 ) { + info = -7; + } else { + info = -8; + } + return dsyconvf_rook_error( "c_dsyconvf_rook", info ); + } + return API_SUFFIX(c_dsyconvf_rook_ndarray)( uplo, way, N, A, strideA1, strideA2, 0, E, 1, 0, IPIV, 1, 0 ); +} diff --git a/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/src/dsyconvf_rook_ndarray.c b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/src/dsyconvf_rook_ndarray.c new file mode 100644 index 000000000000..8ff7b8a16853 --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/src/dsyconvf_rook_ndarray.c @@ -0,0 +1,247 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +/* +* The conversion/reversion algorithm below is adapted from Reference-LAPACK +* DSYCONVF_ROOK at commit 2e5d9c1273435fbd953adb294ed603e4789afaba, +* SRC/dsyconvf_rook.f (blob fb5c4889ca6e78541393b72afb0e98f61a25744a). +* The upstream algorithm is licensed under the following BSD terms. +* See also the package NOTICE for binary-distribution attribution. +* +* Copyright (c) 1992-2025 The University of Tennessee and The University +* of Tennessee Research Foundation. All rights +* reserved. +* Copyright (c) 2000-2025 The University of California Berkeley. All +* rights reserved. +* Copyright (c) 2006-2025 The University of Colorado Denver. All rights +* reserved. +* +* $COPYRIGHT$ +* +* Additional copyrights may follow +* +* $HEADER$ +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions are +* met: +* +* - Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer listed +* in this license in the documentation and/or other materials +* provided with the distribution. +* +* - Neither the name of the copyright holders nor the names of its +* contributors may be used to endorse or promote products derived from +* this software without specific prior written permission. +* +* The copyright holders provide no reassurances that the source code +* provided does not infringe any patent, copyright, or any other +* intellectual property rights of third parties. The copyright holders +* disclaim any liability to any recipient for claims brought against +* recipient by any third party for infringement of that parties +* intellectual property rights. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include "stdlib/lapack/base/dsyconvf_rook.h" +#include "stdlib/blas/base/dswap.h" +#include "validation.h" + +/** +* Swaps row fragments using the existing configured-width DSWAP dependency. +* +* Validation has already checked every physical index and the dependency's +* post-iteration integer arithmetic. Rebasing avoids narrowing matrix offsets. +*/ +static void dsyconvf_rook_swap( double *A, const intmax_t strideA1, const intmax_t strideA2, const intmax_t offsetA, const intmax_t row1, const intmax_t row2, const intmax_t column, const intmax_t count ) { + intmax_t offset1; + intmax_t offset2; + + if ( row1 == row2 || count == 0 ) { + return; + } + offset1 = offsetA+row1*strideA1+column*strideA2; + offset2 = offsetA+row2*strideA1+column*strideA2; + API_SUFFIX(c_dswap_ndarray)( (CBLAS_INT)count, A+offset1, (CBLAS_INT)strideA2, 0, A+offset2, (CBLAS_INT)strideA2, 0 ); +} + +/** +* Converts or reverts symmetric rook factor storage using alternative indexing. +* +* @param uplo stored matrix triangle +* @param way 'C'/'c' to convert or 'R'/'r' to revert +* @param N matrix order +* @param A input/output factor storage +* @param strideA1 first matrix dimension stride +* @param strideA2 second matrix dimension stride +* @param offsetA matrix starting index +* @param E extracted or supplied off-diagonal entries of D +* @param strideE E stride +* @param offsetE E starting index +* @param IPIV read-only, signed one-based LAPACK rook pivots +* @param strideIPIV IPIV stride +* @param offsetIPIV IPIV starting index +* @return zero or a negative one-based argument position +*/ +LAPACK_INT API_SUFFIX(c_dsyconvf_rook_ndarray)( const LAPACK_UPLO uplo, const char way, const LAPACK_INT N, double *A, const LAPACK_INT strideA1, const LAPACK_INT strideA2, const LAPACK_INT offsetA, double *E, const LAPACK_INT strideE, const LAPACK_INT offsetE, const LAPACK_INT *IPIV, const LAPACK_INT strideIPIV, const LAPACK_INT offsetIPIV ) { + const intmax_t n = (intmax_t)N; + const int convert = way == 'C' || way == 'c'; + LAPACK_INT info; + intmax_t target1; + intmax_t target2; + intmax_t count; + intmax_t index; + intmax_t i; + + info = dsyconvf_rook_validate( uplo, way, N, A, strideA1, strideA2, offsetA, E, strideE, offsetE, IPIV, strideIPIV, offsetIPIV ); + if ( info != 0 ) { + return dsyconvf_rook_error( "c_dsyconvf_rook_ndarray", info ); + } + if ( N == 0 ) { + return 0; + } + if ( uplo == LAPACK_UPPER_TRIANGLE ) { + if ( convert ) { + // Extract all 2-by-2 block values before applying any permutation. + E[ offsetE ] = 0.0; + i = n-1; + while ( i > 0 ) { + if ( IPIV[ (intmax_t)offsetIPIV+i*strideIPIV ] < 0 ) { + index = (intmax_t)offsetA+(i-1)*strideA1+i*strideA2; + E[ (intmax_t)offsetE+i*strideE ] = A[ index ]; + E[ (intmax_t)offsetE+(i-1)*strideE ] = 0.0; + A[ index ] = 0.0; + i -= 1; + } else { + E[ (intmax_t)offsetE+i*strideE ] = 0.0; + } + i -= 1; + } + // Upper factorization order: second pair row, then first pair row. + i = n-1; + while ( i >= 0 ) { + target1 = IPIV[ (intmax_t)offsetIPIV+i*strideIPIV ]; + count = n-i-1; + if ( target1 > 0 ) { + dsyconvf_rook_swap( A, strideA1, strideA2, offsetA, i, target1-1, i+1, count ); + } else { + target1 = -target1-1; + target2 = -((intmax_t)IPIV[ (intmax_t)offsetIPIV+(i-1)*strideIPIV ])-1; + dsyconvf_rook_swap( A, strideA1, strideA2, offsetA, i, target1, i+1, count ); + dsyconvf_rook_swap( A, strideA1, strideA2, offsetA, i-1, target2, i+1, count ); + i -= 1; + } + i -= 1; + } + } else { + // Reverse the permutation order before restoring block values. + i = 0; + while ( i < n ) { + target1 = IPIV[ (intmax_t)offsetIPIV+i*strideIPIV ]; + if ( target1 > 0 ) { + dsyconvf_rook_swap( A, strideA1, strideA2, offsetA, target1-1, i, i+1, n-i-1 ); + } else { + i += 1; + target1 = -((intmax_t)IPIV[ (intmax_t)offsetIPIV+i*strideIPIV ])-1; + target2 = -((intmax_t)IPIV[ (intmax_t)offsetIPIV+(i-1)*strideIPIV ])-1; + count = n-i-1; + dsyconvf_rook_swap( A, strideA1, strideA2, offsetA, target2, i-1, i+1, count ); + dsyconvf_rook_swap( A, strideA1, strideA2, offsetA, target1, i, i+1, count ); + } + i += 1; + } + i = n-1; + while ( i > 0 ) { + if ( IPIV[ (intmax_t)offsetIPIV+i*strideIPIV ] < 0 ) { + A[ (intmax_t)offsetA+(i-1)*strideA1+i*strideA2 ] = E[ (intmax_t)offsetE+i*strideE ]; + i -= 1; + } + i -= 1; + } + } + } else if ( convert ) { + E[ (intmax_t)offsetE+(n-1)*strideE ] = 0.0; + i = 0; + while ( i < n ) { + if ( i < n-1 && IPIV[ (intmax_t)offsetIPIV+i*strideIPIV ] < 0 ) { + index = (intmax_t)offsetA+(i+1)*strideA1+i*strideA2; + E[ (intmax_t)offsetE+i*strideE ] = A[ index ]; + E[ (intmax_t)offsetE+(i+1)*strideE ] = 0.0; + A[ index ] = 0.0; + i += 1; + } else { + E[ (intmax_t)offsetE+i*strideE ] = 0.0; + } + i += 1; + } + // Lower factorization order: first pair row, then second pair row. + i = 0; + while ( i < n ) { + target1 = IPIV[ (intmax_t)offsetIPIV+i*strideIPIV ]; + if ( target1 > 0 ) { + dsyconvf_rook_swap( A, strideA1, strideA2, offsetA, i, target1-1, 0, i ); + } else { + target1 = -target1-1; + target2 = -((intmax_t)IPIV[ (intmax_t)offsetIPIV+(i+1)*strideIPIV ])-1; + dsyconvf_rook_swap( A, strideA1, strideA2, offsetA, i, target1, 0, i ); + dsyconvf_rook_swap( A, strideA1, strideA2, offsetA, i+1, target2, 0, i ); + i += 1; + } + i += 1; + } + } else { + i = n-1; + while ( i >= 0 ) { + target1 = IPIV[ (intmax_t)offsetIPIV+i*strideIPIV ]; + if ( target1 > 0 ) { + dsyconvf_rook_swap( A, strideA1, strideA2, offsetA, target1-1, i, 0, i ); + } else { + i -= 1; + target1 = -((intmax_t)IPIV[ (intmax_t)offsetIPIV+i*strideIPIV ])-1; + target2 = -((intmax_t)IPIV[ (intmax_t)offsetIPIV+(i+1)*strideIPIV ])-1; + dsyconvf_rook_swap( A, strideA1, strideA2, offsetA, target2, i+1, 0, i ); + dsyconvf_rook_swap( A, strideA1, strideA2, offsetA, target1, i, 0, i ); + } + i -= 1; + } + i = 0; + while ( i < n-1 ) { + if ( IPIV[ (intmax_t)offsetIPIV+i*strideIPIV ] < 0 ) { + A[ (intmax_t)offsetA+(i+1)*strideA1+i*strideA2 ] = E[ (intmax_t)offsetE+i*strideE ]; + i += 1; + } + i += 1; + } + } + return 0; +} diff --git a/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/src/validation.h b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/src/validation.h new file mode 100644 index 000000000000..d1f1f5ef2129 --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/src/validation.h @@ -0,0 +1,301 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef STDLIB_LAPACK_BASE_DSYCONVF_ROOK_VALIDATION_H +#define STDLIB_LAPACK_BASE_DSYCONVF_ROOK_VALIDATION_H + +#include "stdlib/lapack/base/shared.h" +#include "stdlib/lapack/base/xerbla.h" +#include +#include +#include + +// The configured integer types must be signed and no wider than intmax_t. +typedef char dsyconvf_rook_lapack_integer_check[ ( sizeof( LAPACK_INT ) <= sizeof( intmax_t ) && (LAPACK_INT)-1 < 0 ) ? 1 : -1 ]; +typedef char dsyconvf_rook_blas_integer_check[ ( sizeof( CBLAS_INT ) <= sizeof( intmax_t ) && (CBLAS_INT)-1 < 0 ) ? 1 : -1 ]; + +/** +* Returns the largest configured LAPACK integer. +*/ +static intmax_t dsyconvf_rook_lapack_max( void ) { + return (intmax_t)( UINTMAX_MAX >> ( (sizeof( uintmax_t )-sizeof( LAPACK_INT ))*CHAR_BIT + 1 ) ); +} + +/** +* Returns the largest configured BLAS integer, independently of LAPACK_INT. +*/ +static uintmax_t dsyconvf_rook_blas_max( void ) { + return UINTMAX_MAX >> ( (sizeof( uintmax_t )-sizeof( CBLAS_INT ))*CHAR_BIT + 1 ); +} + +/** +* Computes a signed magnitude without negating the minimum signed integer. +*/ +static uintmax_t dsyconvf_rook_magnitude( const intmax_t value ) { + if ( value < 0 ) { + return (uintmax_t)( -(value+1) ) + 1; + } + return (uintmax_t)value; +} + +/** +* Computes an exactly checked LAPACK integer product with a nonnegative count. +*/ +static int dsyconvf_rook_product( const uintmax_t count, const intmax_t stride, intmax_t *result ) { + const intmax_t limit = dsyconvf_rook_lapack_max(); + uintmax_t magnitude; + uintmax_t bound; + + if ( count == 0 || stride == 0 ) { + *result = 0; + return 1; + } + magnitude = dsyconvf_rook_magnitude( stride ); + bound = (uintmax_t)limit; + if ( stride < 0 ) { + bound += 1; + } + if ( count > bound/magnitude ) { + return 0; + } + magnitude *= count; + if ( stride < 0 ) { + if ( magnitude == (uintmax_t)limit+1 ) { + *result = -limit-1; + } else { + *result = -(intmax_t)magnitude; + } + } else { + *result = (intmax_t)magnitude; + } + return 1; +} + +/** +* Computes an exactly checked LAPACK integer sum. +*/ +static int dsyconvf_rook_sum( const intmax_t x, const intmax_t y, intmax_t *result ) { + const intmax_t limit = dsyconvf_rook_lapack_max(); + const intmax_t minimum = -limit-1; + + if ( ( y > 0 && x > limit-y ) || ( y < 0 && x < minimum-y ) ) { + return 0; + } + *result = x+y; + return 1; +} + +/** +* Checks a nonnegative physical index against integer and pointer limits. +*/ +static int dsyconvf_rook_index_valid( const intmax_t index, const size_t element_size ) { + return index >= 0 && (uintmax_t)index <= (uintmax_t)PTRDIFF_MAX/element_size; +} + +/** +* Computes the greatest common divisor of two positive magnitudes. +*/ +static uintmax_t dsyconvf_rook_gcd( uintmax_t x, uintmax_t y ) { + uintmax_t remainder; + + while ( y != 0 ) { + remainder = x%y; + x = y; + y = remainder; + } + return x; +} + +/** +* Checks a strided vector's physical endpoints after its product was checked. +*/ +static int dsyconvf_rook_vector_valid( const intmax_t offset, const intmax_t delta, const size_t element_size ) { + intmax_t endpoint; + + return dsyconvf_rook_sum( offset, delta, &endpoint ) && dsyconvf_rook_index_valid( offset, element_size ) && dsyconvf_rook_index_valid( endpoint, element_size ); +} + +/** +* Checks the exact integer arithmetic used by both existing DSWAP paths. +* +* Row pointers are rebased before calling DSWAP, so both supplied offsets are +* zero. The conservative magnitude bound also covers Fortran's one-based +* starting index, its final stride increment, and loop-control increments. +*/ +static int dsyconvf_rook_swap_valid( const intmax_t count, const intmax_t stride ) { + const uintmax_t limit = dsyconvf_rook_blas_max(); + const uintmax_t length = (uintmax_t)count; + const uintmax_t magnitude = dsyconvf_rook_magnitude( stride ); + + if ( count == 0 ) { + return 1; + } + if ( length > limit || limit-length < 3 || magnitude > limit ) { + return 0; + } + return magnitude == 0 || length <= (limit-1)/magnitude; +} + +/** +* Validates all active metadata and the complete signed rook-pivot sequence. +* +* Returns ndarray argument positions without printing or changing any array. +* Allocation capacities and disjoint physical storage are caller preconditions. +*/ +static LAPACK_INT dsyconvf_rook_validate( const LAPACK_UPLO uplo, const char way, const LAPACK_INT N, const double *A, const LAPACK_INT strideA1, const LAPACK_INT strideA2, const LAPACK_INT offsetA, const double *E, const LAPACK_INT strideE, const LAPACK_INT offsetE, const LAPACK_INT *IPIV, const LAPACK_INT strideIPIV, const LAPACK_INT offsetIPIV ) { + const intmax_t n = (intmax_t)N; + uintmax_t magnitude1; + uintmax_t magnitude2; + uintmax_t divisor; + uintmax_t target1; + uintmax_t target2; + intmax_t delta1; + intmax_t delta2; + intmax_t corner1; + intmax_t corner2; + intmax_t corner3; + intmax_t pivot1; + intmax_t pivot2; + intmax_t count; + intmax_t i; + + if ( uplo != LAPACK_UPPER_TRIANGLE && uplo != LAPACK_LOWER_TRIANGLE ) { + return -1; + } + if ( way != 'C' && way != 'c' && way != 'R' && way != 'r' ) { + return -2; + } + if ( N < 0 ) { + return -3; + } + if ( N == 0 ) { + return 0; + } + if ( A == NULL ) { + return -4; + } + if ( ( N > 1 && strideA1 == 0 ) || !dsyconvf_rook_product( (uintmax_t)(n-1), strideA1, &delta1 ) ) { + return -5; + } + if ( ( N > 1 && strideA2 == 0 ) || !dsyconvf_rook_product( (uintmax_t)(n-1), strideA2, &delta2 ) ) { + return -6; + } + if ( N > 1 ) { + magnitude1 = dsyconvf_rook_magnitude( strideA1 ); + magnitude2 = dsyconvf_rook_magnitude( strideA2 ); + divisor = dsyconvf_rook_gcd( magnitude1, magnitude2 ); + if ( magnitude2/divisor < (uintmax_t)n && magnitude1/divisor < (uintmax_t)n ) { + return -6; + } + } + if ( !dsyconvf_rook_sum( offsetA, delta1, &corner1 ) || !dsyconvf_rook_sum( offsetA, delta2, &corner2 ) || !dsyconvf_rook_sum( corner1, delta2, &corner3 ) ) { + return -7; + } + if ( !dsyconvf_rook_index_valid( offsetA, sizeof( double ) ) || !dsyconvf_rook_index_valid( corner1, sizeof( double ) ) || !dsyconvf_rook_index_valid( corner2, sizeof( double ) ) || !dsyconvf_rook_index_valid( corner3, sizeof( double ) ) ) { + return -7; + } + if ( E == NULL ) { + return -8; + } + if ( ( N > 1 && strideE == 0 ) || !dsyconvf_rook_product( (uintmax_t)(n-1), strideE, &delta1 ) ) { + return -9; + } + if ( !dsyconvf_rook_vector_valid( offsetE, delta1, sizeof( double ) ) ) { + return -10; + } + if ( IPIV == NULL ) { + return -11; + } + if ( !dsyconvf_rook_product( (uintmax_t)(n-1), strideIPIV, &delta1 ) ) { + return -12; + } + if ( !dsyconvf_rook_vector_valid( offsetIPIV, delta1, sizeof( LAPACK_INT ) ) ) { + return -13; + } + + // Scan in factorization order; the negative targets in each pair are independent. + if ( uplo == LAPACK_UPPER_TRIANGLE ) { + i = n-1; + while ( i >= 0 ) { + pivot1 = IPIV[ (intmax_t)offsetIPIV+i*strideIPIV ]; + target1 = dsyconvf_rook_magnitude( pivot1 ); + if ( target1 == 0 || target1 > (uintmax_t)(i+1) ) { + return -11; + } + count = n-i-1; + if ( pivot1 < 0 ) { + if ( i == 0 ) { + return -11; + } + pivot2 = IPIV[ (intmax_t)offsetIPIV+(i-1)*strideIPIV ]; + target2 = dsyconvf_rook_magnitude( pivot2 ); + if ( pivot2 >= 0 || target2 > (uintmax_t)(i+1) ) { + return -11; + } + if ( ( target1 != (uintmax_t)(i+1) || target2 != (uintmax_t)i ) && !dsyconvf_rook_swap_valid( count, strideA2 ) ) { + return -6; + } + i -= 2; + } else { + if ( target1 != (uintmax_t)(i+1) && !dsyconvf_rook_swap_valid( count, strideA2 ) ) { + return -6; + } + i -= 1; + } + } + } else { + i = 0; + while ( i < n ) { + pivot1 = IPIV[ (intmax_t)offsetIPIV+i*strideIPIV ]; + target1 = dsyconvf_rook_magnitude( pivot1 ); + if ( target1 < (uintmax_t)(i+1) || target1 > (uintmax_t)n ) { + return -11; + } + if ( pivot1 < 0 ) { + if ( i == n-1 ) { + return -11; + } + pivot2 = IPIV[ (intmax_t)offsetIPIV+(i+1)*strideIPIV ]; + target2 = dsyconvf_rook_magnitude( pivot2 ); + if ( pivot2 >= 0 || target2 < (uintmax_t)(i+1) || target2 > (uintmax_t)n ) { + return -11; + } + if ( ( target1 != (uintmax_t)(i+1) || target2 != (uintmax_t)(i+2) ) && !dsyconvf_rook_swap_valid( i, strideA2 ) ) { + return -6; + } + i += 2; + } else { + if ( target1 != (uintmax_t)(i+1) && !dsyconvf_rook_swap_valid( i, strideA2 ) ) { + return -6; + } + i += 1; + } + } + } + return 0; +} + +/** +* Reports a rejected argument through the adopted returning LAPACK helper. +*/ +static LAPACK_INT dsyconvf_rook_error( const char *name, const LAPACK_INT info ) { + API_SUFFIX(lapack_xerbla)( name, info ); + return info; +} + +#endif // !STDLIB_LAPACK_BASE_DSYCONVF_ROOK_VALIDATION_H diff --git a/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/test/common.js b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/test/common.js new file mode 100644 index 000000000000..418ca53fb932 --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/test/common.js @@ -0,0 +1,256 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ +'use strict'; + +var fromString = require( '@stdlib/buffer/from-string' ); +var Float64Array = require( '@stdlib/array/float64' ); +var Int32Array = require( '@stdlib/array/int32' ); +var Uint8Array = require( '@stdlib/array/uint8' ); +var data = require( './fixtures/lapack.json' ).fixtures; +/** +* Decodes reference IEEE754 bits without rounding decimal fixtures. +* @private +* @param {string} hex - IEEE754 hexadecimal bits +* @returns {number} number +*/ +function decode(hex) { + var b; + b = fromString(hex.match(/../g).reverse().join(''), 'hex'); + return b.readDoubleLE(0); +} +/** +* Checks numeric storage, distinguishing signed zeros and accepting NaN storage values. +* @private +* @param {TypedArray} a - actual storage +* @param {TypedArray} b - expected storage +* @returns {boolean} whether values match +*/ +function equal(a, b) { + var i; + for (i = 0; i < a.length; i++) { + if (a[i] !== b[i] && !(a[i] !== a[i] && b[i] !== b[i])) { + return false; + } + if (a[i] === 0 && 1 / a[i] !== 1 / b[i]) { + return false; + } + } + return true; +} +/** +* Packs independent indexed views with typed-array byte offsets and guards. +* @private +* @param {Object} f - directional reference fixture +* @param {integer} sa1 - row stride +* @param {integer} sa2 - column stride +* @param {integer} se - E stride +* @param {integer} sp - pivot stride +* @returns {Object} arguments and whole-buffer expectations +*/ +function pack(f, sa1, sa2, se, sp) { + var expectedA; + var expectedE; + var originalP; + var bytesA; + var bytesE; + var afull; + var efull; + var maskA; + var maskE; + var pfull; + var alen; + var elen; + var plen; + var piv; + var ix; + var oa; + var oe; + var op; + var a; + var e; + var i; + var j; + var n; + n = f.n; + oa = 4 + (( sa1 < 0 ) ? -(n - 1) * sa1 : 0) + (( sa2 < 0 ) ? -(n - 1) * sa2 : 0); + oe = 3 + (( se < 0 ) ? -(n - 1) * se : 0); + op = 2 + (( sp < 0 ) ? -(n - 1) * sp : 0); + alen = oa + (( sa1 > 0 ) ? ((n - 1)) * sa1 : 0) + (( sa2 > 0 ) ? ((n - 1)) * sa2 : 0) + 6; + elen = oe + (( se > 0 ) ? ((n - 1)) * se : 0) + 5; + plen = op + (( sp > 0 ) ? ((n - 1)) * sp : 0) + 4; + afull = new Float64Array(alen + 6); + efull = new Float64Array(elen + 6); + pfull = new Int32Array(plen + 6); + a = new Float64Array(afull.buffer, 24, alen); + e = new Float64Array(efull.buffer, 24, elen); + piv = new Int32Array(pfull.buffer, 12, plen); + for (i = 0; i < afull.length; i++) { + afull[i] = 1024.25 + i; + } + for (i = 0; i < efull.length; i++) { + efull[i] = -1024.25 - i; + } + for (i = 0; i < pfull.length; i++) { + pfull[i] = 701 + i; + } + maskA = []; + maskE = []; + for (j = 0; j < n; j++) { + for (i = 0; i < n; i++) { + ix = oa + (i * sa1) + (j * sa2); + a[ix] = decode(f.input_a_hex_col_major[i + (j * n)]); + if (( f.uplo === 'U' ) ? i <= j : i >= j) { + maskA[3 + ix] = true; + } + } + e[oe + (j * se)] = decode(f.input_e_hex[j]); + piv[op + (j * sp)] = f.ipiv_signed_1based[j]; + if (f.way === 'C') { + maskE[3 + oe + (j * se)] = true; + } + } + expectedA = new Float64Array(afull); + expectedE = new Float64Array(efull); + originalP = new Int32Array(pfull); + bytesA = new Uint8Array(new Uint8Array(afull.buffer)); + bytesE = new Uint8Array(new Uint8Array(efull.buffer)); + for (j = 0; j < n; j++) { + for (i = 0; i < n; i++) { + expectedA[3 + oa + (i * sa1) + (j * sa2)] = decode(f.output_a_hex_col_major[i + (j * n)]); + } + expectedE[3 + oe + (j * se)] = decode(f.output_e_hex[j]); + } + return { + 'args': [ + ( f.uplo === 'U' ) ? 'upper' : 'lower', + ( f.way === 'C' ) ? 'convert' : 'revert', + n, + a, + sa1, + sa2, + oa, + e, + se, + oe, + piv, + sp, + op + ], + 'a': afull, + 'e': efull, + 'p': pfull, + 'expectedA': expectedA, + 'expectedE': expectedE, + 'originalP': originalP, + 'maskA': maskA, + 'maskE': maskE, + 'bytesA': bytesA, + 'bytesE': bytesE + }; +} +/** +* Checks every byte outside the stored mutable envelope elements. +* @private +* @param {Float64Array} a - actual whole storage +* @param {Uint8Array} before - original bytes +* @param {Array} mask - writable element mask +* @returns {boolean} whether all guards retain their exact bits +*/ +function guards(a, before, mask) { + var bytes; + var i; + bytes = new Uint8Array(a.buffer); + for (i = 0; i < bytes.length; i++) { + if (!mask[((i - (i % 8))) / 8] && bytes[i] !== before[i]) { + return false; + } + } + return true; +} +/** +* Exercises both reference directions over independent signed layouts. +* @private +* @param {Object} t - assertion context +* @param {Function} fn - public interface +* @returns {void} +*/ +function corpus(t, fn) { + var strides; + var state; + var f; + var i; + var j; + var n; + for (i = 0; i < data.length; i++) { + f = data[i]; + n = f.n; + if (n === 0) { + t.strictEqual(fn.ndarray(( f.uplo === 'U' ) ? 'upper' : 'lower', ( f.way === 'C' ) ? 'convert' : 'revert', 0, null, NaN, NaN, NaN, null, NaN, NaN, null, NaN, NaN), 0, f.id + ' empty no access'); + continue; + } + strides = [ + [ + 1, + n + 2 + ], + [ + n + 3, + 1 + ], + [ + 2, + (2 * n) + 3 + ], + [ + -1, + n + 3 + ], + [ + 1, + -n - 3 + ], + [ + -2, + (-2 * n) - 3 + ], + [ + 3, + (-3 * n) - 2 + ], + [ + -3, + (3 * n) + 2 + ] + ]; + for (j = 0; j < strides.length; j++) { + state = pack(f, strides[j][0], strides[j][1], ( j % 2 ) ? -2 : 3, ( j % 2 ) ? -3 : 2); + t.strictEqual(fn.ndarray.apply(null, state.args), 0, f.id + ' status ' + j); + t.ok(equal(state.a, state.expectedA), f.id + ' A ' + j); + t.ok(equal(state.e, state.expectedE), f.id + ' E ' + j); + t.deepEqual(state.p, state.originalP, f.id + ' signed pivots ' + j); + t.ok(guards(state.a, state.bytesA, state.maskA), f.id + ' A guards ' + j); + t.ok(guards(state.e, state.bytesE, state.maskE), f.id + ' E guards ' + j); + } + } +} +module.exports = { + 'pack': pack, + 'equal': equal, + 'corpus': corpus, + 'fixtures': data +}; diff --git a/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/test/fixtures/lapack.json b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/test/fixtures/lapack.json new file mode 100644 index 000000000000..7d2d387ea45f --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/test/fixtures/lapack.json @@ -0,0 +1,5492 @@ +{ + "reference_repository": "Reference-LAPACK/lapack", + "reference_sha": "2e5d9c1273435fbd953adb294ed603e4789afaba", + "reference_blob": "fb5c4889ca6e78541393b72afb0e98f61a25744a", + "reference_fixture_provenance": "64 authentic SciPy/OpenBLAS DSYTRF_ROOK/RK factorizations;8 supplied storage fixtures, all unchanged pinned routine results verified at O0/O3 LP64/ILP64. No ordinary factorization substitution.", + "fixtures": [ + { + "id": "empty-rook-U-C", + "provenance": "DSYTRF_ROOK", + "uplo": "U", + "way": "C", + "n": 0, + "input_a_hex_col_major": [], + "input_e_hex": [], + "ipiv_signed_1based": [], + "output_a_hex_col_major": [], + "output_e_hex": [], + "info": 0 + }, + { + "id": "empty-rk-U-R", + "provenance": "DSYTRF_RK", + "uplo": "U", + "way": "R", + "n": 0, + "input_a_hex_col_major": [], + "input_e_hex": [], + "ipiv_signed_1based": [], + "output_a_hex_col_major": [], + "output_e_hex": [], + "info": 0 + }, + { + "id": "empty-rook-L-C", + "provenance": "DSYTRF_ROOK", + "uplo": "L", + "way": "C", + "n": 0, + "input_a_hex_col_major": [], + "input_e_hex": [], + "ipiv_signed_1based": [], + "output_a_hex_col_major": [], + "output_e_hex": [], + "info": 0 + }, + { + "id": "empty-rk-L-R", + "provenance": "DSYTRF_RK", + "uplo": "L", + "way": "R", + "n": 0, + "input_a_hex_col_major": [], + "input_e_hex": [], + "ipiv_signed_1based": [], + "output_a_hex_col_major": [], + "output_e_hex": [], + "info": 0 + }, + { + "id": "single-negative-rook-U-C", + "provenance": "DSYTRF_ROOK", + "uplo": "U", + "way": "C", + "n": 1, + "input_a_hex_col_major": [ + "c008000000000000" + ], + "input_e_hex": [ + "407c840000000000" + ], + "ipiv_signed_1based": [ + 1 + ], + "output_a_hex_col_major": [ + "c008000000000000" + ], + "output_e_hex": [ + "0000000000000000" + ], + "info": 0 + }, + { + "id": "single-negative-rk-U-R", + "provenance": "DSYTRF_RK", + "uplo": "U", + "way": "R", + "n": 1, + "input_a_hex_col_major": [ + "c008000000000000" + ], + "input_e_hex": [ + "0000000000000000" + ], + "ipiv_signed_1based": [ + 1 + ], + "output_a_hex_col_major": [ + "c008000000000000" + ], + "output_e_hex": [ + "0000000000000000" + ], + "info": 0 + }, + { + "id": "single-negative-rook-L-C", + "provenance": "DSYTRF_ROOK", + "uplo": "L", + "way": "C", + "n": 1, + "input_a_hex_col_major": [ + "c008000000000000" + ], + "input_e_hex": [ + "407c840000000000" + ], + "ipiv_signed_1based": [ + 1 + ], + "output_a_hex_col_major": [ + "c008000000000000" + ], + "output_e_hex": [ + "0000000000000000" + ], + "info": 0 + }, + { + "id": "single-negative-rk-L-R", + "provenance": "DSYTRF_RK", + "uplo": "L", + "way": "R", + "n": 1, + "input_a_hex_col_major": [ + "c008000000000000" + ], + "input_e_hex": [ + "0000000000000000" + ], + "ipiv_signed_1based": [ + 1 + ], + "output_a_hex_col_major": [ + "c008000000000000" + ], + "output_e_hex": [ + "0000000000000000" + ], + "info": 0 + }, + { + "id": "single-singular-rook-U-C", + "provenance": "DSYTRF_ROOK", + "uplo": "U", + "way": "C", + "n": 1, + "input_a_hex_col_major": [ + "0000000000000000" + ], + "input_e_hex": [ + "407c840000000000" + ], + "ipiv_signed_1based": [ + 1 + ], + "output_a_hex_col_major": [ + "0000000000000000" + ], + "output_e_hex": [ + "0000000000000000" + ], + "info": 0 + }, + { + "id": "single-singular-rk-U-R", + "provenance": "DSYTRF_RK", + "uplo": "U", + "way": "R", + "n": 1, + "input_a_hex_col_major": [ + "0000000000000000" + ], + "input_e_hex": [ + "0000000000000000" + ], + "ipiv_signed_1based": [ + 1 + ], + "output_a_hex_col_major": [ + "0000000000000000" + ], + "output_e_hex": [ + "0000000000000000" + ], + "info": 0 + }, + { + "id": "single-singular-rook-L-C", + "provenance": "DSYTRF_ROOK", + "uplo": "L", + "way": "C", + "n": 1, + "input_a_hex_col_major": [ + "0000000000000000" + ], + "input_e_hex": [ + "407c840000000000" + ], + "ipiv_signed_1based": [ + 1 + ], + "output_a_hex_col_major": [ + "0000000000000000" + ], + "output_e_hex": [ + "0000000000000000" + ], + "info": 0 + }, + { + "id": "single-singular-rk-L-R", + "provenance": "DSYTRF_RK", + "uplo": "L", + "way": "R", + "n": 1, + "input_a_hex_col_major": [ + "0000000000000000" + ], + "input_e_hex": [ + "0000000000000000" + ], + "ipiv_signed_1based": [ + 1 + ], + "output_a_hex_col_major": [ + "0000000000000000" + ], + "output_e_hex": [ + "0000000000000000" + ], + "info": 0 + }, + { + "id": "exchange2-rook-U-C", + "provenance": "DSYTRF_ROOK", + "uplo": "U", + "way": "C", + "n": 2, + "input_a_hex_col_major": [ + "0000000000000000", + "7ff8000000000101", + "3ff0000000000000", + "0000000000000000" + ], + "input_e_hex": [ + "407c840000000000", + "407c940000000000" + ], + "ipiv_signed_1based": [ + -1, + -2 + ], + "output_a_hex_col_major": [ + "0000000000000000", + "7ff8000000000101", + "0000000000000000", + "0000000000000000" + ], + "output_e_hex": [ + "0000000000000000", + "3ff0000000000000" + ], + "info": 0 + }, + { + "id": "exchange2-rk-U-R", + "provenance": "DSYTRF_RK", + "uplo": "U", + "way": "R", + "n": 2, + "input_a_hex_col_major": [ + "0000000000000000", + "7ff8000000000101", + "0000000000000000", + "0000000000000000" + ], + "input_e_hex": [ + "0000000000000000", + "3ff0000000000000" + ], + "ipiv_signed_1based": [ + -1, + -2 + ], + "output_a_hex_col_major": [ + "0000000000000000", + "7ff8000000000101", + "3ff0000000000000", + "0000000000000000" + ], + "output_e_hex": [ + "0000000000000000", + "3ff0000000000000" + ], + "info": 0 + }, + { + "id": "exchange2-rook-L-C", + "provenance": "DSYTRF_ROOK", + "uplo": "L", + "way": "C", + "n": 2, + "input_a_hex_col_major": [ + "0000000000000000", + "3ff0000000000000", + "7ff8000000000102", + "0000000000000000" + ], + "input_e_hex": [ + "407c840000000000", + "407c940000000000" + ], + "ipiv_signed_1based": [ + -1, + -2 + ], + "output_a_hex_col_major": [ + "0000000000000000", + "0000000000000000", + "7ff8000000000102", + "0000000000000000" + ], + "output_e_hex": [ + "3ff0000000000000", + "0000000000000000" + ], + "info": 0 + }, + { + "id": "exchange2-rk-L-R", + "provenance": "DSYTRF_RK", + "uplo": "L", + "way": "R", + "n": 2, + "input_a_hex_col_major": [ + "0000000000000000", + "0000000000000000", + "7ff8000000000102", + "0000000000000000" + ], + "input_e_hex": [ + "3ff0000000000000", + "0000000000000000" + ], + "ipiv_signed_1based": [ + -1, + -2 + ], + "output_a_hex_col_major": [ + "0000000000000000", + "3ff0000000000000", + "7ff8000000000102", + "0000000000000000" + ], + "output_e_hex": [ + "3ff0000000000000", + "0000000000000000" + ], + "info": 0 + }, + { + "id": "diagonal4-rook-U-C", + "provenance": "DSYTRF_ROOK", + "uplo": "U", + "way": "C", + "n": 4, + "input_a_hex_col_major": [ + "c010000000000000", + "7ff8000000000101", + "7ff8000000000102", + "7ff8000000000103", + "0000000000000000", + "4008000000000000", + "7ff8000000000106", + "7ff8000000000107", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff800000000010b", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4000000000000000" + ], + "input_e_hex": [ + "407c840000000000", + "407c940000000000", + "407ca40000000000", + "407cb40000000000" + ], + "ipiv_signed_1based": [ + 1, + 2, + 3, + 4 + ], + "output_a_hex_col_major": [ + "c010000000000000", + "7ff8000000000101", + "7ff8000000000102", + "7ff8000000000103", + "0000000000000000", + "4008000000000000", + "7ff8000000000106", + "7ff8000000000107", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff800000000010b", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4000000000000000" + ], + "output_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "info": 0 + }, + { + "id": "diagonal4-rk-U-R", + "provenance": "DSYTRF_RK", + "uplo": "U", + "way": "R", + "n": 4, + "input_a_hex_col_major": [ + "c010000000000000", + "7ff8000000000101", + "7ff8000000000102", + "7ff8000000000103", + "0000000000000000", + "4008000000000000", + "7ff8000000000106", + "7ff8000000000107", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff800000000010b", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4000000000000000" + ], + "input_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "ipiv_signed_1based": [ + 1, + 2, + 3, + 4 + ], + "output_a_hex_col_major": [ + "c010000000000000", + "7ff8000000000101", + "7ff8000000000102", + "7ff8000000000103", + "0000000000000000", + "4008000000000000", + "7ff8000000000106", + "7ff8000000000107", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff800000000010b", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4000000000000000" + ], + "output_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "info": 0 + }, + { + "id": "diagonal4-rook-L-C", + "provenance": "DSYTRF_ROOK", + "uplo": "L", + "way": "C", + "n": 4, + "input_a_hex_col_major": [ + "c010000000000000", + "8000000000000000", + "8000000000000000", + "8000000000000000", + "7ff8000000000104", + "4008000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000108", + "7ff8000000000109", + "0000000000000000", + "0000000000000000", + "7ff800000000010c", + "7ff800000000010d", + "7ff800000000010e", + "4000000000000000" + ], + "input_e_hex": [ + "407c840000000000", + "407c940000000000", + "407ca40000000000", + "407cb40000000000" + ], + "ipiv_signed_1based": [ + 1, + 2, + 3, + 4 + ], + "output_a_hex_col_major": [ + "c010000000000000", + "8000000000000000", + "8000000000000000", + "8000000000000000", + "7ff8000000000104", + "4008000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000108", + "7ff8000000000109", + "0000000000000000", + "0000000000000000", + "7ff800000000010c", + "7ff800000000010d", + "7ff800000000010e", + "4000000000000000" + ], + "output_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "info": 0 + }, + { + "id": "diagonal4-rk-L-R", + "provenance": "DSYTRF_RK", + "uplo": "L", + "way": "R", + "n": 4, + "input_a_hex_col_major": [ + "c010000000000000", + "8000000000000000", + "8000000000000000", + "8000000000000000", + "7ff8000000000104", + "4008000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000108", + "7ff8000000000109", + "0000000000000000", + "0000000000000000", + "7ff800000000010c", + "7ff800000000010d", + "7ff800000000010e", + "4000000000000000" + ], + "input_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "ipiv_signed_1based": [ + 1, + 2, + 3, + 4 + ], + "output_a_hex_col_major": [ + "c010000000000000", + "8000000000000000", + "8000000000000000", + "8000000000000000", + "7ff8000000000104", + "4008000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000108", + "7ff8000000000109", + "0000000000000000", + "0000000000000000", + "7ff800000000010c", + "7ff800000000010d", + "7ff800000000010e", + "4000000000000000" + ], + "output_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "info": 0 + }, + { + "id": "all-zero4-rook-U-C", + "provenance": "DSYTRF_ROOK", + "uplo": "U", + "way": "C", + "n": 4, + "input_a_hex_col_major": [ + "0000000000000000", + "7ff8000000000101", + "7ff8000000000102", + "7ff8000000000103", + "0000000000000000", + "0000000000000000", + "7ff8000000000106", + "7ff8000000000107", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff800000000010b", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "input_e_hex": [ + "407c840000000000", + "407c940000000000", + "407ca40000000000", + "407cb40000000000" + ], + "ipiv_signed_1based": [ + 1, + 2, + 3, + 4 + ], + "output_a_hex_col_major": [ + "0000000000000000", + "7ff8000000000101", + "7ff8000000000102", + "7ff8000000000103", + "0000000000000000", + "0000000000000000", + "7ff8000000000106", + "7ff8000000000107", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff800000000010b", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "output_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "info": 0 + }, + { + "id": "all-zero4-rk-U-R", + "provenance": "DSYTRF_RK", + "uplo": "U", + "way": "R", + "n": 4, + "input_a_hex_col_major": [ + "0000000000000000", + "7ff8000000000101", + "7ff8000000000102", + "7ff8000000000103", + "0000000000000000", + "0000000000000000", + "7ff8000000000106", + "7ff8000000000107", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff800000000010b", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "input_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "ipiv_signed_1based": [ + 1, + 2, + 3, + 4 + ], + "output_a_hex_col_major": [ + "0000000000000000", + "7ff8000000000101", + "7ff8000000000102", + "7ff8000000000103", + "0000000000000000", + "0000000000000000", + "7ff8000000000106", + "7ff8000000000107", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff800000000010b", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "output_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "info": 0 + }, + { + "id": "all-zero4-rook-L-C", + "provenance": "DSYTRF_ROOK", + "uplo": "L", + "way": "C", + "n": 4, + "input_a_hex_col_major": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000104", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000108", + "7ff8000000000109", + "0000000000000000", + "0000000000000000", + "7ff800000000010c", + "7ff800000000010d", + "7ff800000000010e", + "0000000000000000" + ], + "input_e_hex": [ + "407c840000000000", + "407c940000000000", + "407ca40000000000", + "407cb40000000000" + ], + "ipiv_signed_1based": [ + 1, + 2, + 3, + 4 + ], + "output_a_hex_col_major": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000104", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000108", + "7ff8000000000109", + "0000000000000000", + "0000000000000000", + "7ff800000000010c", + "7ff800000000010d", + "7ff800000000010e", + "0000000000000000" + ], + "output_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "info": 0 + }, + { + "id": "all-zero4-rk-L-R", + "provenance": "DSYTRF_RK", + "uplo": "L", + "way": "R", + "n": 4, + "input_a_hex_col_major": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000104", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000108", + "7ff8000000000109", + "0000000000000000", + "0000000000000000", + "7ff800000000010c", + "7ff800000000010d", + "7ff800000000010e", + "0000000000000000" + ], + "input_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "ipiv_signed_1based": [ + 1, + 2, + 3, + 4 + ], + "output_a_hex_col_major": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000104", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000108", + "7ff8000000000109", + "0000000000000000", + "0000000000000000", + "7ff800000000010c", + "7ff800000000010d", + "7ff800000000010e", + "0000000000000000" + ], + "output_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "info": 0 + }, + { + "id": "rank-one4-rook-U-C", + "provenance": "DSYTRF_ROOK", + "uplo": "U", + "way": "C", + "n": 4, + "input_a_hex_col_major": [ + "0000000000000000", + "7ff8000000000101", + "7ff8000000000102", + "7ff8000000000103", + "0000000000000000", + "0000000000000000", + "7ff8000000000106", + "7ff8000000000107", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff800000000010b", + "3ff0000000000000", + "3ff0000000000000", + "3ff0000000000000", + "3ff0000000000000" + ], + "input_e_hex": [ + "407c840000000000", + "407c940000000000", + "407ca40000000000", + "407cb40000000000" + ], + "ipiv_signed_1based": [ + 1, + 2, + 3, + 4 + ], + "output_a_hex_col_major": [ + "0000000000000000", + "7ff8000000000101", + "7ff8000000000102", + "7ff8000000000103", + "0000000000000000", + "0000000000000000", + "7ff8000000000106", + "7ff8000000000107", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff800000000010b", + "3ff0000000000000", + "3ff0000000000000", + "3ff0000000000000", + "3ff0000000000000" + ], + "output_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "info": 0 + }, + { + "id": "rank-one4-rk-U-R", + "provenance": "DSYTRF_RK", + "uplo": "U", + "way": "R", + "n": 4, + "input_a_hex_col_major": [ + "0000000000000000", + "7ff8000000000101", + "7ff8000000000102", + "7ff8000000000103", + "0000000000000000", + "0000000000000000", + "7ff8000000000106", + "7ff8000000000107", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff800000000010b", + "3ff0000000000000", + "3ff0000000000000", + "3ff0000000000000", + "3ff0000000000000" + ], + "input_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "ipiv_signed_1based": [ + 1, + 2, + 3, + 4 + ], + "output_a_hex_col_major": [ + "0000000000000000", + "7ff8000000000101", + "7ff8000000000102", + "7ff8000000000103", + "0000000000000000", + "0000000000000000", + "7ff8000000000106", + "7ff8000000000107", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff800000000010b", + "3ff0000000000000", + "3ff0000000000000", + "3ff0000000000000", + "3ff0000000000000" + ], + "output_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "info": 0 + }, + { + "id": "rank-one4-rook-L-C", + "provenance": "DSYTRF_ROOK", + "uplo": "L", + "way": "C", + "n": 4, + "input_a_hex_col_major": [ + "3ff0000000000000", + "3ff0000000000000", + "3ff0000000000000", + "3ff0000000000000", + "7ff8000000000104", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000108", + "7ff8000000000109", + "0000000000000000", + "0000000000000000", + "7ff800000000010c", + "7ff800000000010d", + "7ff800000000010e", + "0000000000000000" + ], + "input_e_hex": [ + "407c840000000000", + "407c940000000000", + "407ca40000000000", + "407cb40000000000" + ], + "ipiv_signed_1based": [ + 1, + 2, + 3, + 4 + ], + "output_a_hex_col_major": [ + "3ff0000000000000", + "3ff0000000000000", + "3ff0000000000000", + "3ff0000000000000", + "7ff8000000000104", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000108", + "7ff8000000000109", + "0000000000000000", + "0000000000000000", + "7ff800000000010c", + "7ff800000000010d", + "7ff800000000010e", + "0000000000000000" + ], + "output_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "info": 0 + }, + { + "id": "rank-one4-rk-L-R", + "provenance": "DSYTRF_RK", + "uplo": "L", + "way": "R", + "n": 4, + "input_a_hex_col_major": [ + "3ff0000000000000", + "3ff0000000000000", + "3ff0000000000000", + "3ff0000000000000", + "7ff8000000000104", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000108", + "7ff8000000000109", + "0000000000000000", + "0000000000000000", + "7ff800000000010c", + "7ff800000000010d", + "7ff800000000010e", + "0000000000000000" + ], + "input_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "ipiv_signed_1based": [ + 1, + 2, + 3, + 4 + ], + "output_a_hex_col_major": [ + "3ff0000000000000", + "3ff0000000000000", + "3ff0000000000000", + "3ff0000000000000", + "7ff8000000000104", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000108", + "7ff8000000000109", + "0000000000000000", + "0000000000000000", + "7ff800000000010c", + "7ff800000000010d", + "7ff800000000010e", + "0000000000000000" + ], + "output_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "info": 0 + }, + { + "id": "exchange-blocks6-rook-U-C", + "provenance": "DSYTRF_ROOK", + "uplo": "U", + "way": "C", + "n": 6, + "input_a_hex_col_major": [ + "0000000000000000", + "7ff8000000000101", + "7ff8000000000102", + "7ff8000000000103", + "7ff8000000000104", + "7ff8000000000105", + "4008000000000000", + "0000000000000000", + "7ff8000000000108", + "7ff8000000000109", + "7ff800000000010a", + "7ff800000000010b", + "8000000000000000", + "8000000000000000", + "0000000000000000", + "7ff800000000010f", + "7ff8000000000110", + "7ff8000000000111", + "8000000000000000", + "8000000000000000", + "4008000000000000", + "0000000000000000", + "7ff8000000000116", + "7ff8000000000117", + "8000000000000000", + "8000000000000000", + "8000000000000000", + "8000000000000000", + "0000000000000000", + "7ff800000000011d", + "8000000000000000", + "8000000000000000", + "8000000000000000", + "8000000000000000", + "4008000000000000", + "0000000000000000" + ], + "input_e_hex": [ + "407c840000000000", + "407c940000000000", + "407ca40000000000", + "407cb40000000000", + "407cc40000000000", + "407cd40000000000" + ], + "ipiv_signed_1based": [ + -1, + -2, + -3, + -4, + -5, + -6 + ], + "output_a_hex_col_major": [ + "0000000000000000", + "7ff8000000000101", + "7ff8000000000102", + "7ff8000000000103", + "7ff8000000000104", + "7ff8000000000105", + "0000000000000000", + "0000000000000000", + "7ff8000000000108", + "7ff8000000000109", + "7ff800000000010a", + "7ff800000000010b", + "8000000000000000", + "8000000000000000", + "0000000000000000", + "7ff800000000010f", + "7ff8000000000110", + "7ff8000000000111", + "8000000000000000", + "8000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000116", + "7ff8000000000117", + "8000000000000000", + "8000000000000000", + "8000000000000000", + "8000000000000000", + "0000000000000000", + "7ff800000000011d", + "8000000000000000", + "8000000000000000", + "8000000000000000", + "8000000000000000", + "0000000000000000", + "0000000000000000" + ], + "output_e_hex": [ + "0000000000000000", + "4008000000000000", + "0000000000000000", + "4008000000000000", + "0000000000000000", + "4008000000000000" + ], + "info": 0 + }, + { + "id": "exchange-blocks6-rk-U-R", + "provenance": "DSYTRF_RK", + "uplo": "U", + "way": "R", + "n": 6, + "input_a_hex_col_major": [ + "0000000000000000", + "7ff8000000000101", + "7ff8000000000102", + "7ff8000000000103", + "7ff8000000000104", + "7ff8000000000105", + "0000000000000000", + "0000000000000000", + "7ff8000000000108", + "7ff8000000000109", + "7ff800000000010a", + "7ff800000000010b", + "8000000000000000", + "8000000000000000", + "0000000000000000", + "7ff800000000010f", + "7ff8000000000110", + "7ff8000000000111", + "8000000000000000", + "8000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000116", + "7ff8000000000117", + "8000000000000000", + "8000000000000000", + "8000000000000000", + "8000000000000000", + "0000000000000000", + "7ff800000000011d", + "8000000000000000", + "8000000000000000", + "8000000000000000", + "8000000000000000", + "0000000000000000", + "0000000000000000" + ], + "input_e_hex": [ + "0000000000000000", + "4008000000000000", + "0000000000000000", + "4008000000000000", + "0000000000000000", + "4008000000000000" + ], + "ipiv_signed_1based": [ + -1, + -2, + -3, + -4, + -5, + -6 + ], + "output_a_hex_col_major": [ + "0000000000000000", + "7ff8000000000101", + "7ff8000000000102", + "7ff8000000000103", + "7ff8000000000104", + "7ff8000000000105", + "4008000000000000", + "0000000000000000", + "7ff8000000000108", + "7ff8000000000109", + "7ff800000000010a", + "7ff800000000010b", + "8000000000000000", + "8000000000000000", + "0000000000000000", + "7ff800000000010f", + "7ff8000000000110", + "7ff8000000000111", + "8000000000000000", + "8000000000000000", + "4008000000000000", + "0000000000000000", + "7ff8000000000116", + "7ff8000000000117", + "8000000000000000", + "8000000000000000", + "8000000000000000", + "8000000000000000", + "0000000000000000", + "7ff800000000011d", + "8000000000000000", + "8000000000000000", + "8000000000000000", + "8000000000000000", + "4008000000000000", + "0000000000000000" + ], + "output_e_hex": [ + "0000000000000000", + "4008000000000000", + "0000000000000000", + "4008000000000000", + "0000000000000000", + "4008000000000000" + ], + "info": 0 + }, + { + "id": "exchange-blocks6-rook-L-C", + "provenance": "DSYTRF_ROOK", + "uplo": "L", + "way": "C", + "n": 6, + "input_a_hex_col_major": [ + "0000000000000000", + "4008000000000000", + "8000000000000000", + "8000000000000000", + "8000000000000000", + "8000000000000000", + "7ff8000000000106", + "0000000000000000", + "8000000000000000", + "8000000000000000", + "8000000000000000", + "8000000000000000", + "7ff800000000010c", + "7ff800000000010d", + "0000000000000000", + "4008000000000000", + "8000000000000000", + "8000000000000000", + "7ff8000000000112", + "7ff8000000000113", + "7ff8000000000114", + "0000000000000000", + "8000000000000000", + "8000000000000000", + "7ff8000000000118", + "7ff8000000000119", + "7ff800000000011a", + "7ff800000000011b", + "0000000000000000", + "4008000000000000", + "7ff800000000011e", + "7ff800000000011f", + "7ff8000000000120", + "7ff8000000000121", + "7ff8000000000122", + "0000000000000000" + ], + "input_e_hex": [ + "407c840000000000", + "407c940000000000", + "407ca40000000000", + "407cb40000000000", + "407cc40000000000", + "407cd40000000000" + ], + "ipiv_signed_1based": [ + -1, + -2, + -3, + -4, + -5, + -6 + ], + "output_a_hex_col_major": [ + "0000000000000000", + "0000000000000000", + "8000000000000000", + "8000000000000000", + "8000000000000000", + "8000000000000000", + "7ff8000000000106", + "0000000000000000", + "8000000000000000", + "8000000000000000", + "8000000000000000", + "8000000000000000", + "7ff800000000010c", + "7ff800000000010d", + "0000000000000000", + "0000000000000000", + "8000000000000000", + "8000000000000000", + "7ff8000000000112", + "7ff8000000000113", + "7ff8000000000114", + "0000000000000000", + "8000000000000000", + "8000000000000000", + "7ff8000000000118", + "7ff8000000000119", + "7ff800000000011a", + "7ff800000000011b", + "0000000000000000", + "0000000000000000", + "7ff800000000011e", + "7ff800000000011f", + "7ff8000000000120", + "7ff8000000000121", + "7ff8000000000122", + "0000000000000000" + ], + "output_e_hex": [ + "4008000000000000", + "0000000000000000", + "4008000000000000", + "0000000000000000", + "4008000000000000", + "0000000000000000" + ], + "info": 0 + }, + { + "id": "exchange-blocks6-rk-L-R", + "provenance": "DSYTRF_RK", + "uplo": "L", + "way": "R", + "n": 6, + "input_a_hex_col_major": [ + "0000000000000000", + "0000000000000000", + "8000000000000000", + "8000000000000000", + "8000000000000000", + "8000000000000000", + "7ff8000000000106", + "0000000000000000", + "8000000000000000", + "8000000000000000", + "8000000000000000", + "8000000000000000", + "7ff800000000010c", + "7ff800000000010d", + "0000000000000000", + "0000000000000000", + "8000000000000000", + "8000000000000000", + "7ff8000000000112", + "7ff8000000000113", + "7ff8000000000114", + "0000000000000000", + "8000000000000000", + "8000000000000000", + "7ff8000000000118", + "7ff8000000000119", + "7ff800000000011a", + "7ff800000000011b", + "0000000000000000", + "0000000000000000", + "7ff800000000011e", + "7ff800000000011f", + "7ff8000000000120", + "7ff8000000000121", + "7ff8000000000122", + "0000000000000000" + ], + "input_e_hex": [ + "4008000000000000", + "0000000000000000", + "4008000000000000", + "0000000000000000", + "4008000000000000", + "0000000000000000" + ], + "ipiv_signed_1based": [ + -1, + -2, + -3, + -4, + -5, + -6 + ], + "output_a_hex_col_major": [ + "0000000000000000", + "4008000000000000", + "8000000000000000", + "8000000000000000", + "8000000000000000", + "8000000000000000", + "7ff8000000000106", + "0000000000000000", + "8000000000000000", + "8000000000000000", + "8000000000000000", + "8000000000000000", + "7ff800000000010c", + "7ff800000000010d", + "0000000000000000", + "4008000000000000", + "8000000000000000", + "8000000000000000", + "7ff8000000000112", + "7ff8000000000113", + "7ff8000000000114", + "0000000000000000", + "8000000000000000", + "8000000000000000", + "7ff8000000000118", + "7ff8000000000119", + "7ff800000000011a", + "7ff800000000011b", + "0000000000000000", + "4008000000000000", + "7ff800000000011e", + "7ff800000000011f", + "7ff8000000000120", + "7ff8000000000121", + "7ff8000000000122", + "0000000000000000" + ], + "output_e_hex": [ + "4008000000000000", + "0000000000000000", + "4008000000000000", + "0000000000000000", + "4008000000000000", + "0000000000000000" + ], + "info": 0 + }, + { + "id": "symmetric-3-seed1-rook-U-C", + "provenance": "DSYTRF_ROOK", + "uplo": "U", + "way": "C", + "n": 3, + "input_a_hex_col_major": [ + "3fd10b41e7bf40d2", + "7ff8000000000101", + "7ff8000000000102", + "bfe0ce07aa1dbcbe", + "3fc738070e4b3180", + "7ff8000000000105", + "bfd220737b1f2603", + "3ff68bfb2d2f8052", + "3fd7552775a92fee" + ], + "input_e_hex": [ + "407c840000000000", + "407c940000000000", + "407ca40000000000" + ], + "ipiv_signed_1based": [ + 1, + 2, + 3 + ], + "output_a_hex_col_major": [ + "3fd10b41e7bf40d2", + "7ff8000000000101", + "7ff8000000000102", + "bfe0ce07aa1dbcbe", + "3fc738070e4b3180", + "7ff8000000000105", + "bfd220737b1f2603", + "3ff68bfb2d2f8052", + "3fd7552775a92fee" + ], + "output_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "info": 0 + }, + { + "id": "symmetric-3-seed1-rk-U-R", + "provenance": "DSYTRF_RK", + "uplo": "U", + "way": "R", + "n": 3, + "input_a_hex_col_major": [ + "3fd10b41e7bf40d2", + "7ff8000000000101", + "7ff8000000000102", + "bfe0ce07aa1dbcbe", + "3fc738070e4b3180", + "7ff8000000000105", + "bfd220737b1f2603", + "3ff68bfb2d2f8052", + "3fd7552775a92fee" + ], + "input_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "ipiv_signed_1based": [ + 1, + 2, + 3 + ], + "output_a_hex_col_major": [ + "3fd10b41e7bf40d2", + "7ff8000000000101", + "7ff8000000000102", + "bfe0ce07aa1dbcbe", + "3fc738070e4b3180", + "7ff8000000000105", + "bfd220737b1f2603", + "3ff68bfb2d2f8052", + "3fd7552775a92fee" + ], + "output_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "info": 0 + }, + { + "id": "symmetric-3-seed1-rook-L-C", + "provenance": "DSYTRF_ROOK", + "uplo": "L", + "way": "C", + "n": 3, + "input_a_hex_col_major": [ + "3fd61e0d28bbb3a1", + "bfe64b64181237a1", + "bfd31f6bf8e2f01e", + "7ff8000000000103", + "3fe79a8263a32f3a", + "3fe32ac1090c5022", + "7ff8000000000106", + "7ff8000000000107", + "3fb1affa2da7ed91" + ], + "input_e_hex": [ + "407c840000000000", + "407c940000000000", + "407ca40000000000" + ], + "ipiv_signed_1based": [ + 1, + 2, + 3 + ], + "output_a_hex_col_major": [ + "3fd61e0d28bbb3a1", + "bfe64b64181237a1", + "bfd31f6bf8e2f01e", + "7ff8000000000103", + "3fe79a8263a32f3a", + "3fe32ac1090c5022", + "7ff8000000000106", + "7ff8000000000107", + "3fb1affa2da7ed91" + ], + "output_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "info": 0 + }, + { + "id": "symmetric-3-seed1-rk-L-R", + "provenance": "DSYTRF_RK", + "uplo": "L", + "way": "R", + "n": 3, + "input_a_hex_col_major": [ + "3fd61e0d28bbb3a1", + "bfe64b64181237a1", + "bfd31f6bf8e2f01e", + "7ff8000000000103", + "3fe79a8263a32f3a", + "3fe32ac1090c5022", + "7ff8000000000106", + "7ff8000000000107", + "3fb1affa2da7ed91" + ], + "input_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "ipiv_signed_1based": [ + 1, + 2, + 3 + ], + "output_a_hex_col_major": [ + "3fd61e0d28bbb3a1", + "bfe64b64181237a1", + "bfd31f6bf8e2f01e", + "7ff8000000000103", + "3fe79a8263a32f3a", + "3fe32ac1090c5022", + "7ff8000000000106", + "7ff8000000000107", + "3fb1affa2da7ed91" + ], + "output_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "info": 0 + }, + { + "id": "symmetric-3-seed42-rook-U-C", + "provenance": "DSYTRF_ROOK", + "uplo": "U", + "way": "C", + "n": 3, + "input_a_hex_col_major": [ + "bfd6d95b5e868536", + "7ff8000000000101", + "7ff8000000000102", + "3ff7129f00d84fd0", + "3fd467a9be0b6ae4", + "7ff8000000000105", + "3f9a17119d372f13", + "3fda8b6cdeeeede5", + "bfff3770ac89d08f" + ], + "input_e_hex": [ + "407c840000000000", + "407c940000000000", + "407ca40000000000" + ], + "ipiv_signed_1based": [ + 1, + 2, + 2 + ], + "output_a_hex_col_major": [ + "bfd6d95b5e868536", + "7ff8000000000101", + "7ff8000000000102", + "3ff7129f00d84fd0", + "3fd467a9be0b6ae4", + "7ff8000000000105", + "3f9a17119d372f13", + "3fda8b6cdeeeede5", + "bfff3770ac89d08f" + ], + "output_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "info": 0 + }, + { + "id": "symmetric-3-seed42-rk-U-R", + "provenance": "DSYTRF_RK", + "uplo": "U", + "way": "R", + "n": 3, + "input_a_hex_col_major": [ + "bfd6d95b5e868536", + "7ff8000000000101", + "7ff8000000000102", + "3ff7129f00d84fd0", + "3fd467a9be0b6ae4", + "7ff8000000000105", + "3f9a17119d372f13", + "3fda8b6cdeeeede5", + "bfff3770ac89d08f" + ], + "input_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "ipiv_signed_1based": [ + 1, + 2, + 2 + ], + "output_a_hex_col_major": [ + "bfd6d95b5e868536", + "7ff8000000000101", + "7ff8000000000102", + "3ff7129f00d84fd0", + "3fd467a9be0b6ae4", + "7ff8000000000105", + "3f9a17119d372f13", + "3fda8b6cdeeeede5", + "bfff3770ac89d08f" + ], + "output_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "info": 0 + }, + { + "id": "symmetric-3-seed42-rook-L-C", + "provenance": "DSYTRF_ROOK", + "uplo": "L", + "way": "C", + "n": 3, + "input_a_hex_col_major": [ + "3fd3807c1104fc6b", + "bfc4e1929847b4e1", + "3ff70efcde687f9c", + "7ff8000000000103", + "bfff58a7ee5c4d56", + "3fd8183005c6ddb5", + "7ff8000000000106", + "7ff8000000000107", + "bfd7cee14f327683" + ], + "input_e_hex": [ + "407c840000000000", + "407c940000000000", + "407ca40000000000" + ], + "ipiv_signed_1based": [ + 1, + 2, + 3 + ], + "output_a_hex_col_major": [ + "3fd3807c1104fc6b", + "bfc4e1929847b4e1", + "3ff70efcde687f9c", + "7ff8000000000103", + "bfff58a7ee5c4d56", + "3fd8183005c6ddb5", + "7ff8000000000106", + "7ff8000000000107", + "bfd7cee14f327683" + ], + "output_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "info": 0 + }, + { + "id": "symmetric-3-seed42-rk-L-R", + "provenance": "DSYTRF_RK", + "uplo": "L", + "way": "R", + "n": 3, + "input_a_hex_col_major": [ + "3fd3807c1104fc6b", + "bfc4e1929847b4e1", + "3ff70efcde687f9c", + "7ff8000000000103", + "bfff58a7ee5c4d56", + "3fd8183005c6ddb5", + "7ff8000000000106", + "7ff8000000000107", + "bfd7cee14f327683" + ], + "input_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "ipiv_signed_1based": [ + 1, + 2, + 3 + ], + "output_a_hex_col_major": [ + "3fd3807c1104fc6b", + "bfc4e1929847b4e1", + "3ff70efcde687f9c", + "7ff8000000000103", + "bfff58a7ee5c4d56", + "3fd8183005c6ddb5", + "7ff8000000000106", + "7ff8000000000107", + "bfd7cee14f327683" + ], + "output_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "info": 0 + }, + { + "id": "symmetric-4-seed3-rook-U-C", + "provenance": "DSYTRF_ROOK", + "uplo": "U", + "way": "C", + "n": 4, + "input_a_hex_col_major": [ + "4011af3f1f883626", + "7ff8000000000101", + "7ff8000000000102", + "7ff8000000000103", + "3ff5e771baa44bc6", + "bff20e79938af57a", + "7ff8000000000106", + "7ff8000000000107", + "3fd72f63366423b8", + "3fef52b727c15f46", + "3fcce69363d82196", + "7ff800000000010b", + "3fdbc37b961fbcde", + "bfe3922ffe3def88", + "bfe68645bb70ac21", + "bfd902e21a1dee83" + ], + "input_e_hex": [ + "407c840000000000", + "407c940000000000", + "407ca40000000000", + "407cb40000000000" + ], + "ipiv_signed_1based": [ + 1, + 2, + -3, + -4 + ], + "output_a_hex_col_major": [ + "4011af3f1f883626", + "7ff8000000000101", + "7ff8000000000102", + "7ff8000000000103", + "3ff5e771baa44bc6", + "bff20e79938af57a", + "7ff8000000000106", + "7ff8000000000107", + "3fd72f63366423b8", + "3fef52b727c15f46", + "3fcce69363d82196", + "7ff800000000010b", + "3fdbc37b961fbcde", + "bfe3922ffe3def88", + "0000000000000000", + "bfd902e21a1dee83" + ], + "output_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "bfe68645bb70ac21" + ], + "info": 0 + }, + { + "id": "symmetric-4-seed3-rk-U-R", + "provenance": "DSYTRF_RK", + "uplo": "U", + "way": "R", + "n": 4, + "input_a_hex_col_major": [ + "4011af3f1f883626", + "7ff8000000000101", + "7ff8000000000102", + "7ff8000000000103", + "3ff5e771baa44bc6", + "bff20e79938af57a", + "7ff8000000000106", + "7ff8000000000107", + "3fd72f63366423b8", + "3fef52b727c15f46", + "3fcce69363d82196", + "7ff800000000010b", + "3fdbc37b961fbcde", + "bfe3922ffe3def88", + "0000000000000000", + "bfd902e21a1dee83" + ], + "input_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "bfe68645bb70ac21" + ], + "ipiv_signed_1based": [ + 1, + 2, + -3, + -4 + ], + "output_a_hex_col_major": [ + "4011af3f1f883626", + "7ff8000000000101", + "7ff8000000000102", + "7ff8000000000103", + "3ff5e771baa44bc6", + "bff20e79938af57a", + "7ff8000000000106", + "7ff8000000000107", + "3fd72f63366423b8", + "3fef52b727c15f46", + "3fcce69363d82196", + "7ff800000000010b", + "3fdbc37b961fbcde", + "bfe3922ffe3def88", + "bfe68645bb70ac21", + "bfd902e21a1dee83" + ], + "output_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "bfe68645bb70ac21" + ], + "info": 0 + }, + { + "id": "symmetric-4-seed3-rook-L-C", + "provenance": "DSYTRF_ROOK", + "uplo": "L", + "way": "C", + "n": 4, + "input_a_hex_col_major": [ + "400053cd67810b16", + "bfe79580c971dd4a", + "bfbc0aa5c69678f1", + "bfcaa005b6cca19b", + "7ff8000000000104", + "bff52fc341dbde4c", + "bfd7868e3a1f2602", + "3fe26f856c731ffd", + "7ff8000000000108", + "7ff8000000000109", + "3fd855872b5cc799", + "bff07e359e52902e", + "7ff800000000010c", + "7ff800000000010d", + "7ff800000000010e", + "bfa447972a210ddb" + ], + "input_e_hex": [ + "407c840000000000", + "407c940000000000", + "407ca40000000000", + "407cb40000000000" + ], + "ipiv_signed_1based": [ + 1, + 2, + -3, + -4 + ], + "output_a_hex_col_major": [ + "400053cd67810b16", + "bfe79580c971dd4a", + "bfbc0aa5c69678f1", + "bfcaa005b6cca19b", + "7ff8000000000104", + "bff52fc341dbde4c", + "bfd7868e3a1f2602", + "3fe26f856c731ffd", + "7ff8000000000108", + "7ff8000000000109", + "3fd855872b5cc799", + "0000000000000000", + "7ff800000000010c", + "7ff800000000010d", + "7ff800000000010e", + "bfa447972a210ddb" + ], + "output_e_hex": [ + "0000000000000000", + "0000000000000000", + "bff07e359e52902e", + "0000000000000000" + ], + "info": 0 + }, + { + "id": "symmetric-4-seed3-rk-L-R", + "provenance": "DSYTRF_RK", + "uplo": "L", + "way": "R", + "n": 4, + "input_a_hex_col_major": [ + "400053cd67810b16", + "bfe79580c971dd4a", + "bfbc0aa5c69678f1", + "bfcaa005b6cca19b", + "7ff8000000000104", + "bff52fc341dbde4c", + "bfd7868e3a1f2602", + "3fe26f856c731ffd", + "7ff8000000000108", + "7ff8000000000109", + "3fd855872b5cc799", + "0000000000000000", + "7ff800000000010c", + "7ff800000000010d", + "7ff800000000010e", + "bfa447972a210ddb" + ], + "input_e_hex": [ + "0000000000000000", + "0000000000000000", + "bff07e359e52902e", + "0000000000000000" + ], + "ipiv_signed_1based": [ + 1, + 2, + -3, + -4 + ], + "output_a_hex_col_major": [ + "400053cd67810b16", + "bfe79580c971dd4a", + "bfbc0aa5c69678f1", + "bfcaa005b6cca19b", + "7ff8000000000104", + "bff52fc341dbde4c", + "bfd7868e3a1f2602", + "3fe26f856c731ffd", + "7ff8000000000108", + "7ff8000000000109", + "3fd855872b5cc799", + "bff07e359e52902e", + "7ff800000000010c", + "7ff800000000010d", + "7ff800000000010e", + "bfa447972a210ddb" + ], + "output_e_hex": [ + "0000000000000000", + "0000000000000000", + "bff07e359e52902e", + "0000000000000000" + ], + "info": 0 + }, + { + "id": "symmetric-4-seed42-rook-U-C", + "provenance": "DSYTRF_ROOK", + "uplo": "U", + "way": "C", + "n": 4, + "input_a_hex_col_major": [ + "3ff888c29d859cae", + "7ff8000000000101", + "7ff8000000000102", + "7ff8000000000103", + "3ff184ee2844c57f", + "bff1d47f8f0f8c29", + "7ff8000000000106", + "7ff8000000000107", + "3fe197c40385a95c", + "bfaa76b8b8b0662b", + "3ff54a09fd11784a", + "7ff800000000010b", + "bfe2be269aa014bf", + "bfde33981fb173c0", + "bfe72ffe3463e8f0", + "bfeb7f52e8390cb7" + ], + "input_e_hex": [ + "407c840000000000", + "407c940000000000", + "407ca40000000000", + "407cb40000000000" + ], + "ipiv_signed_1based": [ + 1, + 2, + 3, + 4 + ], + "output_a_hex_col_major": [ + "3ff888c29d859cae", + "7ff8000000000101", + "7ff8000000000102", + "7ff8000000000103", + "3ff184ee2844c57f", + "bff1d47f8f0f8c29", + "7ff8000000000106", + "7ff8000000000107", + "3fe197c40385a95c", + "bfaa76b8b8b0662b", + "3ff54a09fd11784a", + "7ff800000000010b", + "bfe2be269aa014bf", + "bfde33981fb173c0", + "bfe72ffe3463e8f0", + "bfeb7f52e8390cb7" + ], + "output_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "info": 0 + }, + { + "id": "symmetric-4-seed42-rk-U-R", + "provenance": "DSYTRF_RK", + "uplo": "U", + "way": "R", + "n": 4, + "input_a_hex_col_major": [ + "3ff888c29d859cae", + "7ff8000000000101", + "7ff8000000000102", + "7ff8000000000103", + "3ff184ee2844c57f", + "bff1d47f8f0f8c29", + "7ff8000000000106", + "7ff8000000000107", + "3fe197c40385a95c", + "bfaa76b8b8b0662b", + "3ff54a09fd11784a", + "7ff800000000010b", + "bfe2be269aa014bf", + "bfde33981fb173c0", + "bfe72ffe3463e8f0", + "bfeb7f52e8390cb7" + ], + "input_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "ipiv_signed_1based": [ + 1, + 2, + 3, + 4 + ], + "output_a_hex_col_major": [ + "3ff888c29d859cae", + "7ff8000000000101", + "7ff8000000000102", + "7ff8000000000103", + "3ff184ee2844c57f", + "bff1d47f8f0f8c29", + "7ff8000000000106", + "7ff8000000000107", + "3fe197c40385a95c", + "bfaa76b8b8b0662b", + "3ff54a09fd11784a", + "7ff800000000010b", + "bfe2be269aa014bf", + "bfde33981fb173c0", + "bfe72ffe3463e8f0", + "bfeb7f52e8390cb7" + ], + "output_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "info": 0 + }, + { + "id": "symmetric-4-seed42-rook-L-C", + "provenance": "DSYTRF_ROOK", + "uplo": "L", + "way": "C", + "n": 4, + "input_a_hex_col_major": [ + "bff4d5ba2db7ebc8", + "3ff2601e7ea67d84", + "3fd1d23fc4731d3e", + "bfd3edfc3a0e3d2a", + "7ff8000000000104", + "40002d969da0bce3", + "3fd8c9d8640e420c", + "3f9309734595cd1c", + "7ff8000000000108", + "7ff8000000000109", + "3fe5a9f0fc532575", + "3fe767e1ade9bb6f", + "7ff800000000010c", + "7ff800000000010d", + "7ff800000000010e", + "bff188d3936265a1" + ], + "input_e_hex": [ + "407c840000000000", + "407c940000000000", + "407ca40000000000", + "407cb40000000000" + ], + "ipiv_signed_1based": [ + 2, + 2, + 3, + 4 + ], + "output_a_hex_col_major": [ + "bff4d5ba2db7ebc8", + "3ff2601e7ea67d84", + "3fd1d23fc4731d3e", + "bfd3edfc3a0e3d2a", + "7ff8000000000104", + "40002d969da0bce3", + "3fd8c9d8640e420c", + "3f9309734595cd1c", + "7ff8000000000108", + "7ff8000000000109", + "3fe5a9f0fc532575", + "3fe767e1ade9bb6f", + "7ff800000000010c", + "7ff800000000010d", + "7ff800000000010e", + "bff188d3936265a1" + ], + "output_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "info": 0 + }, + { + "id": "symmetric-4-seed42-rk-L-R", + "provenance": "DSYTRF_RK", + "uplo": "L", + "way": "R", + "n": 4, + "input_a_hex_col_major": [ + "bff4d5ba2db7ebc8", + "3ff2601e7ea67d84", + "3fd1d23fc4731d3e", + "bfd3edfc3a0e3d2a", + "7ff8000000000104", + "40002d969da0bce3", + "3fd8c9d8640e420c", + "3f9309734595cd1c", + "7ff8000000000108", + "7ff8000000000109", + "3fe5a9f0fc532575", + "3fe767e1ade9bb6f", + "7ff800000000010c", + "7ff800000000010d", + "7ff800000000010e", + "bff188d3936265a1" + ], + "input_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "ipiv_signed_1based": [ + 2, + 2, + 3, + 4 + ], + "output_a_hex_col_major": [ + "bff4d5ba2db7ebc8", + "3ff2601e7ea67d84", + "3fd1d23fc4731d3e", + "bfd3edfc3a0e3d2a", + "7ff8000000000104", + "40002d969da0bce3", + "3fd8c9d8640e420c", + "3f9309734595cd1c", + "7ff8000000000108", + "7ff8000000000109", + "3fe5a9f0fc532575", + "3fe767e1ade9bb6f", + "7ff800000000010c", + "7ff800000000010d", + "7ff800000000010e", + "bff188d3936265a1" + ], + "output_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "info": 0 + }, + { + "id": "symmetric-6-seed11-rook-U-C", + "provenance": "DSYTRF_ROOK", + "uplo": "U", + "way": "C", + "n": 6, + "input_a_hex_col_major": [ + "3fb7d7ad95ae2aec", + "7ff8000000000101", + "7ff8000000000102", + "7ff8000000000103", + "7ff8000000000104", + "7ff8000000000105", + "bff0c875f011e992", + "bfc573eb367c6a3b", + "7ff8000000000108", + "7ff8000000000109", + "7ff800000000010a", + "7ff800000000010b", + "3fd145ac6773593d", + "3fc77b4556e8778b", + "bff1b6d949921ce7", + "7ff800000000010f", + "7ff8000000000110", + "7ff8000000000111", + "3fc67aa9aa96bbbf", + "3fddaf114c72e2fb", + "3fc3ccd34a514933", + "bff68b93eb908144", + "7ff8000000000116", + "7ff8000000000117", + "bfbc632bbace55ac", + "3fe989b2fe60586c", + "3fee900e10322c5e", + "bfa4d687b26b9849", + "3feb78b37b56dfbc", + "7ff800000000011d", + "3fe7c80d6334f868", + "bfd02260c29f332a", + "bfbe9c518e448a7e", + "3fd11d5c74275e97", + "bfd029f1ceb84920", + "bff7e121cf48309a" + ], + "input_e_hex": [ + "407c840000000000", + "407c940000000000", + "407ca40000000000", + "407cb40000000000", + "407cc40000000000", + "407cd40000000000" + ], + "ipiv_signed_1based": [ + 1, + 2, + 3, + 4, + 1, + 5 + ], + "output_a_hex_col_major": [ + "3fb7d7ad95ae2aec", + "7ff8000000000101", + "7ff8000000000102", + "7ff8000000000103", + "7ff8000000000104", + "7ff8000000000105", + "bff0c875f011e992", + "bfc573eb367c6a3b", + "7ff8000000000108", + "7ff8000000000109", + "7ff800000000010a", + "7ff800000000010b", + "3fd145ac6773593d", + "3fc77b4556e8778b", + "bff1b6d949921ce7", + "7ff800000000010f", + "7ff8000000000110", + "7ff8000000000111", + "3fc67aa9aa96bbbf", + "3fddaf114c72e2fb", + "3fc3ccd34a514933", + "bff68b93eb908144", + "7ff8000000000116", + "7ff8000000000117", + "bfbc632bbace55ac", + "3fe989b2fe60586c", + "3fee900e10322c5e", + "bfa4d687b26b9849", + "3feb78b37b56dfbc", + "7ff800000000011d", + "bfd029f1ceb84920", + "bfd02260c29f332a", + "bfbe9c518e448a7e", + "3fd11d5c74275e97", + "3fe7c80d6334f868", + "bff7e121cf48309a" + ], + "output_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "info": 0 + }, + { + "id": "symmetric-6-seed11-rk-U-R", + "provenance": "DSYTRF_RK", + "uplo": "U", + "way": "R", + "n": 6, + "input_a_hex_col_major": [ + "3fb7d7ad95ae2aec", + "7ff8000000000101", + "7ff8000000000102", + "7ff8000000000103", + "7ff8000000000104", + "7ff8000000000105", + "bff0c875f011e992", + "bfc573eb367c6a3b", + "7ff8000000000108", + "7ff8000000000109", + "7ff800000000010a", + "7ff800000000010b", + "3fd145ac6773593d", + "3fc77b4556e8778b", + "bff1b6d949921ce7", + "7ff800000000010f", + "7ff8000000000110", + "7ff8000000000111", + "3fc67aa9aa96bbbf", + "3fddaf114c72e2fb", + "3fc3ccd34a514933", + "bff68b93eb908144", + "7ff8000000000116", + "7ff8000000000117", + "bfbc632bbace55ac", + "3fe989b2fe60586c", + "3fee900e10322c5e", + "bfa4d687b26b9849", + "3feb78b37b56dfbc", + "7ff800000000011d", + "bfd029f1ceb84920", + "bfd02260c29f332a", + "bfbe9c518e448a7e", + "3fd11d5c74275e97", + "3fe7c80d6334f868", + "bff7e121cf48309a" + ], + "input_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "ipiv_signed_1based": [ + 1, + 2, + 3, + 4, + 1, + 5 + ], + "output_a_hex_col_major": [ + "3fb7d7ad95ae2aec", + "7ff8000000000101", + "7ff8000000000102", + "7ff8000000000103", + "7ff8000000000104", + "7ff8000000000105", + "bff0c875f011e992", + "bfc573eb367c6a3b", + "7ff8000000000108", + "7ff8000000000109", + "7ff800000000010a", + "7ff800000000010b", + "3fd145ac6773593d", + "3fc77b4556e8778b", + "bff1b6d949921ce7", + "7ff800000000010f", + "7ff8000000000110", + "7ff8000000000111", + "3fc67aa9aa96bbbf", + "3fddaf114c72e2fb", + "3fc3ccd34a514933", + "bff68b93eb908144", + "7ff8000000000116", + "7ff8000000000117", + "bfbc632bbace55ac", + "3fe989b2fe60586c", + "3fee900e10322c5e", + "bfa4d687b26b9849", + "3feb78b37b56dfbc", + "7ff800000000011d", + "3fe7c80d6334f868", + "bfd02260c29f332a", + "bfbe9c518e448a7e", + "3fd11d5c74275e97", + "bfd029f1ceb84920", + "bff7e121cf48309a" + ], + "output_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "info": 0 + }, + { + "id": "symmetric-6-seed11-rook-L-C", + "provenance": "DSYTRF_ROOK", + "uplo": "L", + "way": "C", + "n": 6, + "input_a_hex_col_major": [ + "bff7e121cf48309a", + "bfd02260c29f332a", + "bfbe9c518e448a7e", + "3fd11d5c74275e97", + "3fe7c80d6334f868", + "bfd029f1ceb84920", + "7ff8000000000106", + "3feb78b37b56dfbc", + "3fee900e10322c5e", + "bfa4d687b26b9849", + "3fe989b2fe60586c", + "bfbc632bbace55ad", + "7ff800000000010c", + "7ff800000000010d", + "bff240f42992c3ca", + "3fc87485175c4da1", + "3fd110a73dae0a15", + "3fd2e8b9da60758f", + "7ff8000000000112", + "7ff8000000000113", + "7ff8000000000114", + "bff5e10104be6360", + "3fdbde218a532377", + "3fc122b36093d93c", + "7ff8000000000118", + "7ff8000000000119", + "7ff800000000011a", + "7ff800000000011b", + "bfc573eb367c6a3d", + "bff0c875f011e990", + "7ff800000000011e", + "7ff800000000011f", + "7ff8000000000120", + "7ff8000000000121", + "7ff8000000000122", + "3fb7d7ad95ae2ae7" + ], + "input_e_hex": [ + "407c840000000000", + "407c940000000000", + "407ca40000000000", + "407cb40000000000", + "407cc40000000000", + "407cd40000000000" + ], + "ipiv_signed_1based": [ + 5, + 5, + 3, + 4, + 5, + 6 + ], + "output_a_hex_col_major": [ + "bff7e121cf48309a", + "3fe7c80d6334f868", + "bfbe9c518e448a7e", + "3fd11d5c74275e97", + "bfd02260c29f332a", + "bfd029f1ceb84920", + "7ff8000000000106", + "3feb78b37b56dfbc", + "3fee900e10322c5e", + "bfa4d687b26b9849", + "3fe989b2fe60586c", + "bfbc632bbace55ad", + "7ff800000000010c", + "7ff800000000010d", + "bff240f42992c3ca", + "3fc87485175c4da1", + "3fd110a73dae0a15", + "3fd2e8b9da60758f", + "7ff8000000000112", + "7ff8000000000113", + "7ff8000000000114", + "bff5e10104be6360", + "3fdbde218a532377", + "3fc122b36093d93c", + "7ff8000000000118", + "7ff8000000000119", + "7ff800000000011a", + "7ff800000000011b", + "bfc573eb367c6a3d", + "bff0c875f011e990", + "7ff800000000011e", + "7ff800000000011f", + "7ff8000000000120", + "7ff8000000000121", + "7ff8000000000122", + "3fb7d7ad95ae2ae7" + ], + "output_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "info": 0 + }, + { + "id": "symmetric-6-seed11-rk-L-R", + "provenance": "DSYTRF_RK", + "uplo": "L", + "way": "R", + "n": 6, + "input_a_hex_col_major": [ + "bff7e121cf48309a", + "3fe7c80d6334f868", + "bfbe9c518e448a7e", + "3fd11d5c74275e97", + "bfd02260c29f332a", + "bfd029f1ceb84920", + "7ff8000000000106", + "3feb78b37b56dfbc", + "3fee900e10322c5e", + "bfa4d687b26b9849", + "3fe989b2fe60586c", + "bfbc632bbace55ad", + "7ff800000000010c", + "7ff800000000010d", + "bff240f42992c3ca", + "3fc87485175c4da1", + "3fd110a73dae0a15", + "3fd2e8b9da60758f", + "7ff8000000000112", + "7ff8000000000113", + "7ff8000000000114", + "bff5e10104be6360", + "3fdbde218a532377", + "3fc122b36093d93c", + "7ff8000000000118", + "7ff8000000000119", + "7ff800000000011a", + "7ff800000000011b", + "bfc573eb367c6a3d", + "bff0c875f011e990", + "7ff800000000011e", + "7ff800000000011f", + "7ff8000000000120", + "7ff8000000000121", + "7ff8000000000122", + "3fb7d7ad95ae2ae7" + ], + "input_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "ipiv_signed_1based": [ + 5, + 5, + 3, + 4, + 5, + 6 + ], + "output_a_hex_col_major": [ + "bff7e121cf48309a", + "bfd02260c29f332a", + "bfbe9c518e448a7e", + "3fd11d5c74275e97", + "3fe7c80d6334f868", + "bfd029f1ceb84920", + "7ff8000000000106", + "3feb78b37b56dfbc", + "3fee900e10322c5e", + "bfa4d687b26b9849", + "3fe989b2fe60586c", + "bfbc632bbace55ad", + "7ff800000000010c", + "7ff800000000010d", + "bff240f42992c3ca", + "3fc87485175c4da1", + "3fd110a73dae0a15", + "3fd2e8b9da60758f", + "7ff8000000000112", + "7ff8000000000113", + "7ff8000000000114", + "bff5e10104be6360", + "3fdbde218a532377", + "3fc122b36093d93c", + "7ff8000000000118", + "7ff8000000000119", + "7ff800000000011a", + "7ff800000000011b", + "bfc573eb367c6a3d", + "bff0c875f011e990", + "7ff800000000011e", + "7ff800000000011f", + "7ff8000000000120", + "7ff8000000000121", + "7ff8000000000122", + "3fb7d7ad95ae2ae7" + ], + "output_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "info": 0 + }, + { + "id": "symmetric-6-seed42-rook-U-C", + "provenance": "DSYTRF_ROOK", + "uplo": "U", + "way": "C", + "n": 6, + "input_a_hex_col_major": [ + "3ffd84bde012c9a7", + "7ff8000000000101", + "7ff8000000000102", + "7ff8000000000103", + "7ff8000000000104", + "7ff8000000000105", + "3ff4b46880b7ebb8", + "bfe5b2bc73e45aa5", + "7ff8000000000108", + "7ff8000000000109", + "7ff800000000010a", + "7ff800000000010b", + "3fdfd21f26a6715e", + "3fe02c3e8ab17525", + "3febd1e225914d79", + "7ff800000000010f", + "7ff8000000000110", + "7ff8000000000111", + "bfeafe767483cb1c", + "bfb52ea6ad8dee10", + "bfe4813808cadf4a", + "3fc30781d01e1e02", + "7ff8000000000116", + "7ff8000000000117", + "bfec15c365608bff", + "3fd7b57bf99f559a", + "bfe1f60ddf97a469", + "bff625fbe4ffa5ff", + "3fc5c5309f3a9ce3", + "7ff800000000011d", + "3fd7cb4fe80b2dee", + "3fc50d89cfca9acb", + "bfe4d95ba8f60dfe", + "bfdb7227166de8dc", + "3fddabbf7ff0ab37", + "3ff21045403538ce" + ], + "input_e_hex": [ + "407c840000000000", + "407c940000000000", + "407ca40000000000", + "407cb40000000000", + "407cc40000000000", + "407cd40000000000" + ], + "ipiv_signed_1based": [ + 1, + 2, + 3, + -1, + -5, + 6 + ], + "output_a_hex_col_major": [ + "3ffd84bde012c9a7", + "7ff8000000000101", + "7ff8000000000102", + "7ff8000000000103", + "7ff8000000000104", + "7ff8000000000105", + "3ff4b46880b7ebb8", + "bfe5b2bc73e45aa5", + "7ff8000000000108", + "7ff8000000000109", + "7ff800000000010a", + "7ff800000000010b", + "3fdfd21f26a6715e", + "3fe02c3e8ab17525", + "3febd1e225914d79", + "7ff800000000010f", + "7ff8000000000110", + "7ff8000000000111", + "bfeafe767483cb1c", + "bfb52ea6ad8dee10", + "bfe4813808cadf4a", + "3fc30781d01e1e02", + "7ff8000000000116", + "7ff8000000000117", + "bfec15c365608bff", + "3fd7b57bf99f559a", + "bfe1f60ddf97a469", + "0000000000000000", + "3fc5c5309f3a9ce3", + "7ff800000000011d", + "bfdb7227166de8dc", + "3fc50d89cfca9acb", + "bfe4d95ba8f60dfe", + "3fd7cb4fe80b2dee", + "3fddabbf7ff0ab37", + "3ff21045403538ce" + ], + "output_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "bff625fbe4ffa5ff", + "0000000000000000" + ], + "info": 0 + }, + { + "id": "symmetric-6-seed42-rk-U-R", + "provenance": "DSYTRF_RK", + "uplo": "U", + "way": "R", + "n": 6, + "input_a_hex_col_major": [ + "3ffd84bde012c9a7", + "7ff8000000000101", + "7ff8000000000102", + "7ff8000000000103", + "7ff8000000000104", + "7ff8000000000105", + "3ff4b46880b7ebb8", + "bfe5b2bc73e45aa5", + "7ff8000000000108", + "7ff8000000000109", + "7ff800000000010a", + "7ff800000000010b", + "3fdfd21f26a6715e", + "3fe02c3e8ab17525", + "3febd1e225914d79", + "7ff800000000010f", + "7ff8000000000110", + "7ff8000000000111", + "bfeafe767483cb1c", + "bfb52ea6ad8dee10", + "bfe4813808cadf4a", + "3fc30781d01e1e02", + "7ff8000000000116", + "7ff8000000000117", + "bfec15c365608bff", + "3fd7b57bf99f559a", + "bfe1f60ddf97a469", + "0000000000000000", + "3fc5c5309f3a9ce3", + "7ff800000000011d", + "bfdb7227166de8dc", + "3fc50d89cfca9acb", + "bfe4d95ba8f60dfe", + "3fd7cb4fe80b2dee", + "3fddabbf7ff0ab37", + "3ff21045403538ce" + ], + "input_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "bff625fbe4ffa5ff", + "0000000000000000" + ], + "ipiv_signed_1based": [ + 1, + 2, + 3, + -1, + -5, + 6 + ], + "output_a_hex_col_major": [ + "3ffd84bde012c9a7", + "7ff8000000000101", + "7ff8000000000102", + "7ff8000000000103", + "7ff8000000000104", + "7ff8000000000105", + "3ff4b46880b7ebb8", + "bfe5b2bc73e45aa5", + "7ff8000000000108", + "7ff8000000000109", + "7ff800000000010a", + "7ff800000000010b", + "3fdfd21f26a6715e", + "3fe02c3e8ab17525", + "3febd1e225914d79", + "7ff800000000010f", + "7ff8000000000110", + "7ff8000000000111", + "bfeafe767483cb1c", + "bfb52ea6ad8dee10", + "bfe4813808cadf4a", + "3fc30781d01e1e02", + "7ff8000000000116", + "7ff8000000000117", + "bfec15c365608bff", + "3fd7b57bf99f559a", + "bfe1f60ddf97a469", + "bff625fbe4ffa5ff", + "3fc5c5309f3a9ce3", + "7ff800000000011d", + "3fd7cb4fe80b2dee", + "3fc50d89cfca9acb", + "bfe4d95ba8f60dfe", + "bfdb7227166de8dc", + "3fddabbf7ff0ab37", + "3ff21045403538ce" + ], + "output_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "bff625fbe4ffa5ff", + "0000000000000000" + ], + "info": 0 + }, + { + "id": "symmetric-6-seed42-rook-L-C", + "provenance": "DSYTRF_ROOK", + "uplo": "L", + "way": "C", + "n": 6, + "input_a_hex_col_major": [ + "3fd3807c1104fc6b", + "bff308ef79662abc", + "bfe17b342dc73538", + "bff06093fed75364", + "bfb8e4f0ca722632", + "bfe3c00c7514c555", + "7ff8000000000106", + "3fda6a360b330944", + "bfdeeab0f30372ea", + "bff06d3cb8a57c98", + "3fd6f0d40dbcdbc7", + "bfe0594267a3ed44", + "7ff800000000010c", + "7ff800000000010d", + "3fed0fb369bc7329", + "3fd9409f3155e08e", + "3fde8b5709217ae0", + "bfd1dbfa1b7c669e", + "7ff8000000000112", + "7ff8000000000113", + "7ff8000000000114", + "3fed8fcb5298bcaa", + "bfec5ba91304cc83", + "3fe430609751137f", + "7ff8000000000118", + "7ff8000000000119", + "7ff800000000011a", + "7ff800000000011b", + "bff632f17008e3d9", + "bfdf32c8b309b1d7", + "7ff800000000011e", + "7ff800000000011f", + "7ff8000000000120", + "7ff8000000000121", + "7ff8000000000122", + "3ff8bf490c58a61f" + ], + "input_e_hex": [ + "407c840000000000", + "407c940000000000", + "407ca40000000000", + "407cb40000000000", + "407cc40000000000", + "407cd40000000000" + ], + "ipiv_signed_1based": [ + -1, + -5, + 3, + 4, + 5, + 6 + ], + "output_a_hex_col_major": [ + "3fd3807c1104fc6b", + "0000000000000000", + "bfe17b342dc73538", + "bff06093fed75364", + "bfb8e4f0ca722632", + "bfe3c00c7514c555", + "7ff8000000000106", + "3fda6a360b330944", + "bfdeeab0f30372ea", + "bff06d3cb8a57c98", + "3fd6f0d40dbcdbc7", + "bfe0594267a3ed44", + "7ff800000000010c", + "7ff800000000010d", + "3fed0fb369bc7329", + "3fd9409f3155e08e", + "3fde8b5709217ae0", + "bfd1dbfa1b7c669e", + "7ff8000000000112", + "7ff8000000000113", + "7ff8000000000114", + "3fed8fcb5298bcaa", + "bfec5ba91304cc83", + "3fe430609751137f", + "7ff8000000000118", + "7ff8000000000119", + "7ff800000000011a", + "7ff800000000011b", + "bff632f17008e3d9", + "bfdf32c8b309b1d7", + "7ff800000000011e", + "7ff800000000011f", + "7ff8000000000120", + "7ff8000000000121", + "7ff8000000000122", + "3ff8bf490c58a61f" + ], + "output_e_hex": [ + "bff308ef79662abc", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "info": 0 + }, + { + "id": "symmetric-6-seed42-rk-L-R", + "provenance": "DSYTRF_RK", + "uplo": "L", + "way": "R", + "n": 6, + "input_a_hex_col_major": [ + "3fd3807c1104fc6b", + "0000000000000000", + "bfe17b342dc73538", + "bff06093fed75364", + "bfb8e4f0ca722632", + "bfe3c00c7514c555", + "7ff8000000000106", + "3fda6a360b330944", + "bfdeeab0f30372ea", + "bff06d3cb8a57c98", + "3fd6f0d40dbcdbc7", + "bfe0594267a3ed44", + "7ff800000000010c", + "7ff800000000010d", + "3fed0fb369bc7329", + "3fd9409f3155e08e", + "3fde8b5709217ae0", + "bfd1dbfa1b7c669e", + "7ff8000000000112", + "7ff8000000000113", + "7ff8000000000114", + "3fed8fcb5298bcaa", + "bfec5ba91304cc83", + "3fe430609751137f", + "7ff8000000000118", + "7ff8000000000119", + "7ff800000000011a", + "7ff800000000011b", + "bff632f17008e3d9", + "bfdf32c8b309b1d7", + "7ff800000000011e", + "7ff800000000011f", + "7ff8000000000120", + "7ff8000000000121", + "7ff8000000000122", + "3ff8bf490c58a61f" + ], + "input_e_hex": [ + "bff308ef79662abc", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "ipiv_signed_1based": [ + -1, + -5, + 3, + 4, + 5, + 6 + ], + "output_a_hex_col_major": [ + "3fd3807c1104fc6b", + "bff308ef79662abc", + "bfe17b342dc73538", + "bff06093fed75364", + "bfb8e4f0ca722632", + "bfe3c00c7514c555", + "7ff8000000000106", + "3fda6a360b330944", + "bfdeeab0f30372ea", + "bff06d3cb8a57c98", + "3fd6f0d40dbcdbc7", + "bfe0594267a3ed44", + "7ff800000000010c", + "7ff800000000010d", + "3fed0fb369bc7329", + "3fd9409f3155e08e", + "3fde8b5709217ae0", + "bfd1dbfa1b7c669e", + "7ff8000000000112", + "7ff8000000000113", + "7ff8000000000114", + "3fed8fcb5298bcaa", + "bfec5ba91304cc83", + "3fe430609751137f", + "7ff8000000000118", + "7ff8000000000119", + "7ff800000000011a", + "7ff800000000011b", + "bff632f17008e3d9", + "bfdf32c8b309b1d7", + "7ff800000000011e", + "7ff800000000011f", + "7ff8000000000120", + "7ff8000000000121", + "7ff8000000000122", + "3ff8bf490c58a61f" + ], + "output_e_hex": [ + "bff308ef79662abc", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "info": 0 + }, + { + "id": "symmetric-8-seed42-rook-U-C", + "provenance": "DSYTRF_ROOK", + "uplo": "U", + "way": "C", + "n": 8, + "input_a_hex_col_major": [ + "bfad563b13d46dff", + "7ff8000000000101", + "7ff8000000000102", + "7ff8000000000103", + "7ff8000000000104", + "7ff8000000000105", + "7ff8000000000106", + "7ff8000000000107", + "3fefd4dca9ff7574", + "bff315b843a2074d", + "7ff800000000010a", + "7ff800000000010b", + "7ff800000000010c", + "7ff800000000010d", + "7ff800000000010e", + "7ff800000000010f", + "3fec79554bd3a78b", + "bfe31825eafea338", + "bfa889987d67d2bf", + "7ff8000000000113", + "7ff8000000000114", + "7ff8000000000115", + "7ff8000000000116", + "7ff8000000000117", + "3fd77da00843c87d", + "3fa30cd01918921e", + "bff14515e5f19fae", + "bfb02c100024f546", + "7ff800000000011c", + "7ff800000000011d", + "7ff800000000011e", + "7ff800000000011f", + "bff57d8f35d19fd6", + "bfd545a0915c6593", + "bfd52da5595272fd", + "bfd6bc40a3a7a012", + "3ff17f10d72e4dec", + "7ff8000000000125", + "7ff8000000000126", + "7ff8000000000127", + "3fd17a922dd9d58f", + "3fd0e88f455a1154", + "3fdd8349974d7f9b", + "3fcf545a62005564", + "bfe37630bb12162f", + "3fcd8b58005a7903", + "7ff800000000012e", + "7ff800000000012f", + "3fcc8ec777a33857", + "bf34150f32cc484c", + "3fd02cd5de4562f5", + "3fc9bb7ebaf4b1cb", + "3fe8b507dd4edd68", + "3ff80243eeea93a3", + "bfe225437a4697f6", + "7ff8000000000137", + "bfe024122fc5d525", + "3fe159593880c94f", + "bfebd95f33f43212", + "3fdeab9a20d5f7b6", + "bfec2ca20b8486fb", + "bfb84cbc22e839b4", + "bfd9fd78fcca42f8", + "3fe2c25555abef69" + ], + "input_e_hex": [ + "407c840000000000", + "407c940000000000", + "407ca40000000000", + "407cb40000000000", + "407cc40000000000", + "407cd40000000000", + "407ce40000000000", + "407cf40000000000" + ], + "ipiv_signed_1based": [ + 1, + 2, + -3, + -4, + 5, + -4, + -7, + 8 + ], + "output_a_hex_col_major": [ + "bfad563b13d46dff", + "7ff8000000000101", + "7ff8000000000102", + "7ff8000000000103", + "7ff8000000000104", + "7ff8000000000105", + "7ff8000000000106", + "7ff8000000000107", + "3fefd4dca9ff7574", + "bff315b843a2074d", + "7ff800000000010a", + "7ff800000000010b", + "7ff800000000010c", + "7ff800000000010d", + "7ff800000000010e", + "7ff800000000010f", + "3fec79554bd3a78b", + "bfe31825eafea338", + "bfa889987d67d2bf", + "7ff8000000000113", + "7ff8000000000114", + "7ff8000000000115", + "7ff8000000000116", + "7ff8000000000117", + "3fd77da00843c87d", + "3fa30cd01918921e", + "0000000000000000", + "bfb02c100024f546", + "7ff800000000011c", + "7ff800000000011d", + "7ff800000000011e", + "7ff800000000011f", + "bff57d8f35d19fd6", + "bfd545a0915c6593", + "bfd52da5595272fd", + "bfd6bc40a3a7a012", + "3ff17f10d72e4dec", + "7ff8000000000125", + "7ff8000000000126", + "7ff8000000000127", + "3fd17a922dd9d58f", + "3fd0e88f455a1154", + "3fdd8349974d7f9b", + "3fcf545a62005564", + "bfe37630bb12162f", + "3fcd8b58005a7903", + "7ff800000000012e", + "7ff800000000012f", + "3fcc8ec777a33857", + "bf34150f32cc484c", + "3fd02cd5de4562f5", + "3fc9bb7ebaf4b1cb", + "3fe8b507dd4edd68", + "0000000000000000", + "bfe225437a4697f6", + "7ff8000000000137", + "bfe024122fc5d525", + "3fe159593880c94f", + "bfebd95f33f43212", + "bfb84cbc22e839b4", + "bfec2ca20b8486fb", + "3fdeab9a20d5f7b6", + "bfd9fd78fcca42f8", + "3fe2c25555abef69" + ], + "output_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "bff14515e5f19fae", + "0000000000000000", + "0000000000000000", + "3ff80243eeea93a3", + "0000000000000000" + ], + "info": 0 + }, + { + "id": "symmetric-8-seed42-rk-U-R", + "provenance": "DSYTRF_RK", + "uplo": "U", + "way": "R", + "n": 8, + "input_a_hex_col_major": [ + "bfad563b13d46dff", + "7ff8000000000101", + "7ff8000000000102", + "7ff8000000000103", + "7ff8000000000104", + "7ff8000000000105", + "7ff8000000000106", + "7ff8000000000107", + "3fefd4dca9ff7574", + "bff315b843a2074d", + "7ff800000000010a", + "7ff800000000010b", + "7ff800000000010c", + "7ff800000000010d", + "7ff800000000010e", + "7ff800000000010f", + "3fec79554bd3a78b", + "bfe31825eafea338", + "bfa889987d67d2bf", + "7ff8000000000113", + "7ff8000000000114", + "7ff8000000000115", + "7ff8000000000116", + "7ff8000000000117", + "3fd77da00843c87d", + "3fa30cd01918921e", + "0000000000000000", + "bfb02c100024f546", + "7ff800000000011c", + "7ff800000000011d", + "7ff800000000011e", + "7ff800000000011f", + "bff57d8f35d19fd6", + "bfd545a0915c6593", + "bfd52da5595272fd", + "bfd6bc40a3a7a012", + "3ff17f10d72e4dec", + "7ff8000000000125", + "7ff8000000000126", + "7ff8000000000127", + "3fd17a922dd9d58f", + "3fd0e88f455a1154", + "3fdd8349974d7f9b", + "3fcf545a62005564", + "bfe37630bb12162f", + "3fcd8b58005a7903", + "7ff800000000012e", + "7ff800000000012f", + "3fcc8ec777a33857", + "bf34150f32cc484c", + "3fd02cd5de4562f5", + "3fc9bb7ebaf4b1cb", + "3fe8b507dd4edd68", + "0000000000000000", + "bfe225437a4697f6", + "7ff8000000000137", + "bfe024122fc5d525", + "3fe159593880c94f", + "bfebd95f33f43212", + "bfb84cbc22e839b4", + "bfec2ca20b8486fb", + "3fdeab9a20d5f7b6", + "bfd9fd78fcca42f8", + "3fe2c25555abef69" + ], + "input_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "bff14515e5f19fae", + "0000000000000000", + "0000000000000000", + "3ff80243eeea93a3", + "0000000000000000" + ], + "ipiv_signed_1based": [ + 1, + 2, + -3, + -4, + 5, + -4, + -7, + 8 + ], + "output_a_hex_col_major": [ + "bfad563b13d46dff", + "7ff8000000000101", + "7ff8000000000102", + "7ff8000000000103", + "7ff8000000000104", + "7ff8000000000105", + "7ff8000000000106", + "7ff8000000000107", + "3fefd4dca9ff7574", + "bff315b843a2074d", + "7ff800000000010a", + "7ff800000000010b", + "7ff800000000010c", + "7ff800000000010d", + "7ff800000000010e", + "7ff800000000010f", + "3fec79554bd3a78b", + "bfe31825eafea338", + "bfa889987d67d2bf", + "7ff8000000000113", + "7ff8000000000114", + "7ff8000000000115", + "7ff8000000000116", + "7ff8000000000117", + "3fd77da00843c87d", + "3fa30cd01918921e", + "bff14515e5f19fae", + "bfb02c100024f546", + "7ff800000000011c", + "7ff800000000011d", + "7ff800000000011e", + "7ff800000000011f", + "bff57d8f35d19fd6", + "bfd545a0915c6593", + "bfd52da5595272fd", + "bfd6bc40a3a7a012", + "3ff17f10d72e4dec", + "7ff8000000000125", + "7ff8000000000126", + "7ff8000000000127", + "3fd17a922dd9d58f", + "3fd0e88f455a1154", + "3fdd8349974d7f9b", + "3fcf545a62005564", + "bfe37630bb12162f", + "3fcd8b58005a7903", + "7ff800000000012e", + "7ff800000000012f", + "3fcc8ec777a33857", + "bf34150f32cc484c", + "3fd02cd5de4562f5", + "3fc9bb7ebaf4b1cb", + "3fe8b507dd4edd68", + "3ff80243eeea93a3", + "bfe225437a4697f6", + "7ff8000000000137", + "bfe024122fc5d525", + "3fe159593880c94f", + "bfebd95f33f43212", + "3fdeab9a20d5f7b6", + "bfec2ca20b8486fb", + "bfb84cbc22e839b4", + "bfd9fd78fcca42f8", + "3fe2c25555abef69" + ], + "output_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "bff14515e5f19fae", + "0000000000000000", + "0000000000000000", + "3ff80243eeea93a3", + "0000000000000000" + ], + "info": 0 + }, + { + "id": "symmetric-8-seed42-rook-L-C", + "provenance": "DSYTRF_ROOK", + "uplo": "L", + "way": "C", + "n": 8, + "input_a_hex_col_major": [ + "3fd3807c1104fc6b", + "bff3b4cb0d8cb736", + "bfc0a40c56b62041", + "bfe2fa5c7bca0330", + "3fd0826a494be789", + "3fd1101919b5ef35", + "3fedeccbcd941f87", + "3fd8d4927dc7a089", + "7ff8000000000108", + "bfbd2ba91c170c6c", + "bfdf2321ec035247", + "bfd6b308b8c30159", + "3fdf8aa4ca30387a", + "3fd2be4810649398", + "bfb89d1fea11b4d9", + "3fd58224b814ee28", + "7ff8000000000110", + "7ff8000000000111", + "3ff0e5af4aad6a7f", + "3fe3ae5dca18086d", + "bfd19839f0459f05", + "bfead52cc45875ad", + "3fceb19b08105881", + "bfe83b8cfc71b3c2", + "7ff8000000000118", + "7ff8000000000119", + "7ff800000000011a", + "bff049c0a0a096b2", + "bfe9003da35ffb01", + "bfe677fac46a5985", + "bff0be5f2f6ebeb7", + "bfc6b5519abc7230", + "7ff8000000000120", + "7ff8000000000121", + "7ff8000000000122", + "7ff8000000000123", + "3f829d3f5f0f7e5d", + "3ff668b60746b848", + "3fec667cfce88103", + "bfd3d78f5e3f52b8", + "7ff8000000000128", + "7ff8000000000129", + "7ff800000000012a", + "7ff800000000012b", + "7ff800000000012c", + "3fc448da67e47489", + "3fe195d62008445f", + "3fda29924d6fe0ae", + "7ff8000000000130", + "7ff8000000000131", + "7ff8000000000132", + "7ff8000000000133", + "7ff8000000000134", + "7ff8000000000135", + "3fe41c801b7ba328", + "3fdea090a5028c00", + "7ff8000000000138", + "7ff8000000000139", + "7ff800000000013a", + "7ff800000000013b", + "7ff800000000013c", + "7ff800000000013d", + "7ff800000000013e", + "bfae38734294f209" + ], + "input_e_hex": [ + "407c840000000000", + "407c940000000000", + "407ca40000000000", + "407cb40000000000", + "407cc40000000000", + "407cd40000000000", + "407ce40000000000", + "407cf40000000000" + ], + "ipiv_signed_1based": [ + -1, + -5, + 3, + 7, + -5, + -6, + 8, + 8 + ], + "output_a_hex_col_major": [ + "3fd3807c1104fc6b", + "0000000000000000", + "bfc0a40c56b62041", + "3fedeccbcd941f87", + "3fd0826a494be789", + "3fd1101919b5ef35", + "3fd8d4927dc7a089", + "bfe2fa5c7bca0330", + "7ff8000000000108", + "bfbd2ba91c170c6c", + "bfdf2321ec035247", + "bfb89d1fea11b4d9", + "3fdf8aa4ca30387a", + "3fd2be4810649398", + "3fd58224b814ee28", + "bfd6b308b8c30159", + "7ff8000000000110", + "7ff8000000000111", + "3ff0e5af4aad6a7f", + "3fceb19b08105881", + "bfd19839f0459f05", + "bfead52cc45875ad", + "bfe83b8cfc71b3c2", + "3fe3ae5dca18086d", + "7ff8000000000118", + "7ff8000000000119", + "7ff800000000011a", + "bff049c0a0a096b2", + "bfe9003da35ffb01", + "bfe677fac46a5985", + "bfc6b5519abc7230", + "bff0be5f2f6ebeb7", + "7ff8000000000120", + "7ff8000000000121", + "7ff8000000000122", + "7ff8000000000123", + "3f829d3f5f0f7e5d", + "0000000000000000", + "bfd3d78f5e3f52b8", + "3fec667cfce88103", + "7ff8000000000128", + "7ff8000000000129", + "7ff800000000012a", + "7ff800000000012b", + "7ff800000000012c", + "3fc448da67e47489", + "3fda29924d6fe0ae", + "3fe195d62008445f", + "7ff8000000000130", + "7ff8000000000131", + "7ff8000000000132", + "7ff8000000000133", + "7ff8000000000134", + "7ff8000000000135", + "3fe41c801b7ba328", + "3fdea090a5028c00", + "7ff8000000000138", + "7ff8000000000139", + "7ff800000000013a", + "7ff800000000013b", + "7ff800000000013c", + "7ff800000000013d", + "7ff800000000013e", + "bfae38734294f209" + ], + "output_e_hex": [ + "bff3b4cb0d8cb736", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "3ff668b60746b848", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "info": 0 + }, + { + "id": "symmetric-8-seed42-rk-L-R", + "provenance": "DSYTRF_RK", + "uplo": "L", + "way": "R", + "n": 8, + "input_a_hex_col_major": [ + "3fd3807c1104fc6b", + "0000000000000000", + "bfc0a40c56b62041", + "3fedeccbcd941f87", + "3fd0826a494be789", + "3fd1101919b5ef35", + "3fd8d4927dc7a089", + "bfe2fa5c7bca0330", + "7ff8000000000108", + "bfbd2ba91c170c6c", + "bfdf2321ec035247", + "bfb89d1fea11b4d9", + "3fdf8aa4ca30387a", + "3fd2be4810649398", + "3fd58224b814ee28", + "bfd6b308b8c30159", + "7ff8000000000110", + "7ff8000000000111", + "3ff0e5af4aad6a7f", + "3fceb19b08105881", + "bfd19839f0459f05", + "bfead52cc45875ad", + "bfe83b8cfc71b3c2", + "3fe3ae5dca18086d", + "7ff8000000000118", + "7ff8000000000119", + "7ff800000000011a", + "bff049c0a0a096b2", + "bfe9003da35ffb01", + "bfe677fac46a5985", + "bfc6b5519abc7230", + "bff0be5f2f6ebeb7", + "7ff8000000000120", + "7ff8000000000121", + "7ff8000000000122", + "7ff8000000000123", + "3f829d3f5f0f7e5d", + "0000000000000000", + "bfd3d78f5e3f52b8", + "3fec667cfce88103", + "7ff8000000000128", + "7ff8000000000129", + "7ff800000000012a", + "7ff800000000012b", + "7ff800000000012c", + "3fc448da67e47489", + "3fda29924d6fe0ae", + "3fe195d62008445f", + "7ff8000000000130", + "7ff8000000000131", + "7ff8000000000132", + "7ff8000000000133", + "7ff8000000000134", + "7ff8000000000135", + "3fe41c801b7ba328", + "3fdea090a5028c00", + "7ff8000000000138", + "7ff8000000000139", + "7ff800000000013a", + "7ff800000000013b", + "7ff800000000013c", + "7ff800000000013d", + "7ff800000000013e", + "bfae38734294f209" + ], + "input_e_hex": [ + "bff3b4cb0d8cb736", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "3ff668b60746b848", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "ipiv_signed_1based": [ + -1, + -5, + 3, + 7, + -5, + -6, + 8, + 8 + ], + "output_a_hex_col_major": [ + "3fd3807c1104fc6b", + "bff3b4cb0d8cb736", + "bfc0a40c56b62041", + "bfe2fa5c7bca0330", + "3fd0826a494be789", + "3fd1101919b5ef35", + "3fedeccbcd941f87", + "3fd8d4927dc7a089", + "7ff8000000000108", + "bfbd2ba91c170c6c", + "bfdf2321ec035247", + "bfd6b308b8c30159", + "3fdf8aa4ca30387a", + "3fd2be4810649398", + "bfb89d1fea11b4d9", + "3fd58224b814ee28", + "7ff8000000000110", + "7ff8000000000111", + "3ff0e5af4aad6a7f", + "3fe3ae5dca18086d", + "bfd19839f0459f05", + "bfead52cc45875ad", + "3fceb19b08105881", + "bfe83b8cfc71b3c2", + "7ff8000000000118", + "7ff8000000000119", + "7ff800000000011a", + "bff049c0a0a096b2", + "bfe9003da35ffb01", + "bfe677fac46a5985", + "bff0be5f2f6ebeb7", + "bfc6b5519abc7230", + "7ff8000000000120", + "7ff8000000000121", + "7ff8000000000122", + "7ff8000000000123", + "3f829d3f5f0f7e5d", + "3ff668b60746b848", + "3fec667cfce88103", + "bfd3d78f5e3f52b8", + "7ff8000000000128", + "7ff8000000000129", + "7ff800000000012a", + "7ff800000000012b", + "7ff800000000012c", + "3fc448da67e47489", + "3fe195d62008445f", + "3fda29924d6fe0ae", + "7ff8000000000130", + "7ff8000000000131", + "7ff8000000000132", + "7ff8000000000133", + "7ff8000000000134", + "7ff8000000000135", + "3fe41c801b7ba328", + "3fdea090a5028c00", + "7ff8000000000138", + "7ff8000000000139", + "7ff800000000013a", + "7ff800000000013b", + "7ff800000000013c", + "7ff800000000013d", + "7ff800000000013e", + "bfae38734294f209" + ], + "output_e_hex": [ + "bff3b4cb0d8cb736", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "3ff668b60746b848", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "info": 0 + }, + { + "id": "symmetric-8-seed93-rook-U-C", + "provenance": "DSYTRF_ROOK", + "uplo": "U", + "way": "C", + "n": 8, + "input_a_hex_col_major": [ + "bfddc9ce4f99d977", + "7ff8000000000101", + "7ff8000000000102", + "7ff8000000000103", + "7ff8000000000104", + "7ff8000000000105", + "7ff8000000000106", + "7ff8000000000107", + "bfdef7972969fda8", + "4003c66bdc47bfbf", + "7ff800000000010a", + "7ff800000000010b", + "7ff800000000010c", + "7ff800000000010d", + "7ff800000000010e", + "7ff800000000010f", + "3fef15338222d1ea", + "bff312802c33ed12", + "bff0046c0bdb7921", + "7ff8000000000113", + "7ff8000000000114", + "7ff8000000000115", + "7ff8000000000116", + "7ff8000000000117", + "3fc659ad838d213d", + "3fc6868ef05e8bf8", + "3feadc4e59f8d413", + "bff89b59934d53bc", + "7ff800000000011c", + "7ff800000000011d", + "7ff800000000011e", + "7ff800000000011f", + "3fe81b07cb5882ee", + "bfc3451306e7b03d", + "3ff1d749522d322f", + "3fe4717e028b3874", + "3ff120f8dda53083", + "7ff8000000000125", + "7ff8000000000126", + "7ff8000000000127", + "3fcefe2537184b87", + "3fb30ec8d4c6840d", + "bfda0cd546928fc6", + "bfe7c8b51def59a6", + "bfb23c1c5e4587d1", + "bfdeca806f489d8c", + "7ff800000000012e", + "7ff800000000012f", + "bf90b88fb097e0fe", + "3fdf3821936d8e37", + "bfa2c5fb26bae778", + "3fd620cee34ce72f", + "3fdf03f0ef8e3c1a", + "bff8e69452ef0f6f", + "3fcde484fc4dc39f", + "7ff8000000000137", + "3fc2728288d84be8", + "3fc3879d72c2f00a", + "bfc6ed62499a1c8b", + "bf85f95ea0dbe980", + "bfbd6fdc51906156", + "bf78050cad0c75fc", + "bfc6632ebf7d7adc", + "40043ccf464285e9" + ], + "input_e_hex": [ + "407c840000000000", + "407c940000000000", + "407ca40000000000", + "407cb40000000000", + "407cc40000000000", + "407cd40000000000", + "407ce40000000000", + "407cf40000000000" + ], + "ipiv_signed_1based": [ + 1, + 2, + 3, + 4, + 1, + -6, + -7, + 8 + ], + "output_a_hex_col_major": [ + "bfddc9ce4f99d977", + "7ff8000000000101", + "7ff8000000000102", + "7ff8000000000103", + "7ff8000000000104", + "7ff8000000000105", + "7ff8000000000106", + "7ff8000000000107", + "bfdef7972969fda8", + "4003c66bdc47bfbf", + "7ff800000000010a", + "7ff800000000010b", + "7ff800000000010c", + "7ff800000000010d", + "7ff800000000010e", + "7ff800000000010f", + "3fef15338222d1ea", + "bff312802c33ed12", + "bff0046c0bdb7921", + "7ff8000000000113", + "7ff8000000000114", + "7ff8000000000115", + "7ff8000000000116", + "7ff8000000000117", + "3fc659ad838d213d", + "3fc6868ef05e8bf8", + "3feadc4e59f8d413", + "bff89b59934d53bc", + "7ff800000000011c", + "7ff800000000011d", + "7ff800000000011e", + "7ff800000000011f", + "3fe81b07cb5882ee", + "bfc3451306e7b03d", + "3ff1d749522d322f", + "3fe4717e028b3874", + "3ff120f8dda53083", + "7ff8000000000125", + "7ff8000000000126", + "7ff8000000000127", + "bfb23c1c5e4587d1", + "3fb30ec8d4c6840d", + "bfda0cd546928fc6", + "bfe7c8b51def59a6", + "3fcefe2537184b87", + "bfdeca806f489d8c", + "7ff800000000012e", + "7ff800000000012f", + "3fdf03f0ef8e3c1a", + "3fdf3821936d8e37", + "bfa2c5fb26bae778", + "3fd620cee34ce72f", + "bf90b88fb097e0fe", + "0000000000000000", + "3fcde484fc4dc39f", + "7ff8000000000137", + "bfbd6fdc51906156", + "3fc3879d72c2f00a", + "bfc6ed62499a1c8b", + "bf85f95ea0dbe980", + "3fc2728288d84be8", + "bf78050cad0c75fc", + "bfc6632ebf7d7adc", + "40043ccf464285e9" + ], + "output_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "bff8e69452ef0f6f", + "0000000000000000" + ], + "info": 0 + }, + { + "id": "symmetric-8-seed93-rk-U-R", + "provenance": "DSYTRF_RK", + "uplo": "U", + "way": "R", + "n": 8, + "input_a_hex_col_major": [ + "bfddc9ce4f99d977", + "7ff8000000000101", + "7ff8000000000102", + "7ff8000000000103", + "7ff8000000000104", + "7ff8000000000105", + "7ff8000000000106", + "7ff8000000000107", + "bfdef7972969fda8", + "4003c66bdc47bfbf", + "7ff800000000010a", + "7ff800000000010b", + "7ff800000000010c", + "7ff800000000010d", + "7ff800000000010e", + "7ff800000000010f", + "3fef15338222d1ea", + "bff312802c33ed12", + "bff0046c0bdb7921", + "7ff8000000000113", + "7ff8000000000114", + "7ff8000000000115", + "7ff8000000000116", + "7ff8000000000117", + "3fc659ad838d213d", + "3fc6868ef05e8bf8", + "3feadc4e59f8d413", + "bff89b59934d53bc", + "7ff800000000011c", + "7ff800000000011d", + "7ff800000000011e", + "7ff800000000011f", + "3fe81b07cb5882ee", + "bfc3451306e7b03d", + "3ff1d749522d322f", + "3fe4717e028b3874", + "3ff120f8dda53083", + "7ff8000000000125", + "7ff8000000000126", + "7ff8000000000127", + "bfb23c1c5e4587d1", + "3fb30ec8d4c6840d", + "bfda0cd546928fc6", + "bfe7c8b51def59a6", + "3fcefe2537184b87", + "bfdeca806f489d8c", + "7ff800000000012e", + "7ff800000000012f", + "3fdf03f0ef8e3c1a", + "3fdf3821936d8e37", + "bfa2c5fb26bae778", + "3fd620cee34ce72f", + "bf90b88fb097e0fe", + "0000000000000000", + "3fcde484fc4dc39f", + "7ff8000000000137", + "bfbd6fdc51906156", + "3fc3879d72c2f00a", + "bfc6ed62499a1c8b", + "bf85f95ea0dbe980", + "3fc2728288d84be8", + "bf78050cad0c75fc", + "bfc6632ebf7d7adc", + "40043ccf464285e9" + ], + "input_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "bff8e69452ef0f6f", + "0000000000000000" + ], + "ipiv_signed_1based": [ + 1, + 2, + 3, + 4, + 1, + -6, + -7, + 8 + ], + "output_a_hex_col_major": [ + "bfddc9ce4f99d977", + "7ff8000000000101", + "7ff8000000000102", + "7ff8000000000103", + "7ff8000000000104", + "7ff8000000000105", + "7ff8000000000106", + "7ff8000000000107", + "bfdef7972969fda8", + "4003c66bdc47bfbf", + "7ff800000000010a", + "7ff800000000010b", + "7ff800000000010c", + "7ff800000000010d", + "7ff800000000010e", + "7ff800000000010f", + "3fef15338222d1ea", + "bff312802c33ed12", + "bff0046c0bdb7921", + "7ff8000000000113", + "7ff8000000000114", + "7ff8000000000115", + "7ff8000000000116", + "7ff8000000000117", + "3fc659ad838d213d", + "3fc6868ef05e8bf8", + "3feadc4e59f8d413", + "bff89b59934d53bc", + "7ff800000000011c", + "7ff800000000011d", + "7ff800000000011e", + "7ff800000000011f", + "3fe81b07cb5882ee", + "bfc3451306e7b03d", + "3ff1d749522d322f", + "3fe4717e028b3874", + "3ff120f8dda53083", + "7ff8000000000125", + "7ff8000000000126", + "7ff8000000000127", + "3fcefe2537184b87", + "3fb30ec8d4c6840d", + "bfda0cd546928fc6", + "bfe7c8b51def59a6", + "bfb23c1c5e4587d1", + "bfdeca806f489d8c", + "7ff800000000012e", + "7ff800000000012f", + "bf90b88fb097e0fe", + "3fdf3821936d8e37", + "bfa2c5fb26bae778", + "3fd620cee34ce72f", + "3fdf03f0ef8e3c1a", + "bff8e69452ef0f6f", + "3fcde484fc4dc39f", + "7ff8000000000137", + "3fc2728288d84be8", + "3fc3879d72c2f00a", + "bfc6ed62499a1c8b", + "bf85f95ea0dbe980", + "bfbd6fdc51906156", + "bf78050cad0c75fc", + "bfc6632ebf7d7adc", + "40043ccf464285e9" + ], + "output_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "bff8e69452ef0f6f", + "0000000000000000" + ], + "info": 0 + }, + { + "id": "symmetric-8-seed93-rook-L-C", + "provenance": "DSYTRF_ROOK", + "uplo": "L", + "way": "C", + "n": 8, + "input_a_hex_col_major": [ + "3ff1b7513924a362", + "bfd139743df902e3", + "3ff10b1404678518", + "3fe1ce33f8349475", + "3fe0f38bb27d5e95", + "bfb58d4a88754ad0", + "bfd9afd90f22de8b", + "3fd512a5059a3220", + "7ff8000000000108", + "3fee3a85f14fe7fd", + "3ff701e3b6a5ee3f", + "3fd9a0935308dd75", + "bfa3c1b6e4071636", + "bfebdb46377c8fb0", + "bfc99dc1c64a18d9", + "3fe0660e0a4daf8d", + "7ff8000000000110", + "7ff8000000000111", + "c010081a03b877b9", + "3fdb133bc75c84a1", + "3fc10dff66e7cb68", + "bfd88c6f31816a57", + "bfd724efc7284790", + "3fd88d749b94a193", + "7ff8000000000118", + "7ff8000000000119", + "7ff800000000011a", + "3fe3cdb34c70a853", + "bff33224d4544c61", + "3fe6734c07691764", + "3fe3c7427dd9ed12", + "bfc3cd6d56ab9a70", + "7ff8000000000120", + "7ff8000000000121", + "7ff8000000000122", + "7ff8000000000123", + "bfe3ae7b46ac478f", + "3fba83fcf465eeb5", + "bfde619b5fdd9fef", + "3fe1975d81b351be", + "7ff8000000000128", + "7ff8000000000129", + "7ff800000000012a", + "7ff800000000012b", + "7ff800000000012c", + "bfdc48d634b561fb", + "bfd676b52db3ce4c", + "bfe4a6ae19c768ed", + "7ff8000000000130", + "7ff8000000000131", + "7ff8000000000132", + "7ff8000000000133", + "7ff8000000000134", + "7ff8000000000135", + "bff102461d59e0bd", + "bfe5b541dddbde12", + "7ff8000000000138", + "7ff8000000000139", + "7ff800000000013a", + "7ff800000000013b", + "7ff800000000013c", + "7ff800000000013d", + "7ff800000000013e", + "400b2231b54c6faf" + ], + "input_e_hex": [ + "407c840000000000", + "407c940000000000", + "407ca40000000000", + "407cb40000000000", + "407cc40000000000", + "407cd40000000000", + "407ce40000000000", + "407cf40000000000" + ], + "ipiv_signed_1based": [ + 1, + 2, + 3, + -7, + -6, + 6, + 7, + 8 + ], + "output_a_hex_col_major": [ + "3ff1b7513924a362", + "bfd139743df902e3", + "3ff10b1404678518", + "bfd9afd90f22de8b", + "bfb58d4a88754ad0", + "3fe0f38bb27d5e95", + "3fe1ce33f8349475", + "3fd512a5059a3220", + "7ff8000000000108", + "3fee3a85f14fe7fd", + "3ff701e3b6a5ee3f", + "bfc99dc1c64a18d9", + "bfebdb46377c8fb0", + "bfa3c1b6e4071636", + "3fd9a0935308dd75", + "3fe0660e0a4daf8d", + "7ff8000000000110", + "7ff8000000000111", + "c010081a03b877b9", + "bfd724efc7284790", + "bfd88c6f31816a57", + "3fc10dff66e7cb68", + "3fdb133bc75c84a1", + "3fd88d749b94a193", + "7ff8000000000118", + "7ff8000000000119", + "7ff800000000011a", + "3fe3cdb34c70a853", + "0000000000000000", + "3fe6734c07691764", + "3fe3c7427dd9ed12", + "bfc3cd6d56ab9a70", + "7ff8000000000120", + "7ff8000000000121", + "7ff8000000000122", + "7ff8000000000123", + "bfe3ae7b46ac478f", + "3fba83fcf465eeb5", + "bfde619b5fdd9fef", + "3fe1975d81b351be", + "7ff8000000000128", + "7ff8000000000129", + "7ff800000000012a", + "7ff800000000012b", + "7ff800000000012c", + "bfdc48d634b561fb", + "bfd676b52db3ce4c", + "bfe4a6ae19c768ed", + "7ff8000000000130", + "7ff8000000000131", + "7ff8000000000132", + "7ff8000000000133", + "7ff8000000000134", + "7ff8000000000135", + "bff102461d59e0bd", + "bfe5b541dddbde12", + "7ff8000000000138", + "7ff8000000000139", + "7ff800000000013a", + "7ff800000000013b", + "7ff800000000013c", + "7ff800000000013d", + "7ff800000000013e", + "400b2231b54c6faf" + ], + "output_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "bff33224d4544c61", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "info": 0 + }, + { + "id": "symmetric-8-seed93-rk-L-R", + "provenance": "DSYTRF_RK", + "uplo": "L", + "way": "R", + "n": 8, + "input_a_hex_col_major": [ + "3ff1b7513924a362", + "bfd139743df902e3", + "3ff10b1404678518", + "bfd9afd90f22de8b", + "bfb58d4a88754ad0", + "3fe0f38bb27d5e95", + "3fe1ce33f8349475", + "3fd512a5059a3220", + "7ff8000000000108", + "3fee3a85f14fe7fd", + "3ff701e3b6a5ee3f", + "bfc99dc1c64a18d9", + "bfebdb46377c8fb0", + "bfa3c1b6e4071636", + "3fd9a0935308dd75", + "3fe0660e0a4daf8d", + "7ff8000000000110", + "7ff8000000000111", + "c010081a03b877b9", + "bfd724efc7284790", + "bfd88c6f31816a57", + "3fc10dff66e7cb68", + "3fdb133bc75c84a1", + "3fd88d749b94a193", + "7ff8000000000118", + "7ff8000000000119", + "7ff800000000011a", + "3fe3cdb34c70a853", + "0000000000000000", + "3fe6734c07691764", + "3fe3c7427dd9ed12", + "bfc3cd6d56ab9a70", + "7ff8000000000120", + "7ff8000000000121", + "7ff8000000000122", + "7ff8000000000123", + "bfe3ae7b46ac478f", + "3fba83fcf465eeb5", + "bfde619b5fdd9fef", + "3fe1975d81b351be", + "7ff8000000000128", + "7ff8000000000129", + "7ff800000000012a", + "7ff800000000012b", + "7ff800000000012c", + "bfdc48d634b561fb", + "bfd676b52db3ce4c", + "bfe4a6ae19c768ed", + "7ff8000000000130", + "7ff8000000000131", + "7ff8000000000132", + "7ff8000000000133", + "7ff8000000000134", + "7ff8000000000135", + "bff102461d59e0bd", + "bfe5b541dddbde12", + "7ff8000000000138", + "7ff8000000000139", + "7ff800000000013a", + "7ff800000000013b", + "7ff800000000013c", + "7ff800000000013d", + "7ff800000000013e", + "400b2231b54c6faf" + ], + "input_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "bff33224d4544c61", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "ipiv_signed_1based": [ + 1, + 2, + 3, + -7, + -6, + 6, + 7, + 8 + ], + "output_a_hex_col_major": [ + "3ff1b7513924a362", + "bfd139743df902e3", + "3ff10b1404678518", + "3fe1ce33f8349475", + "3fe0f38bb27d5e95", + "bfb58d4a88754ad0", + "bfd9afd90f22de8b", + "3fd512a5059a3220", + "7ff8000000000108", + "3fee3a85f14fe7fd", + "3ff701e3b6a5ee3f", + "3fd9a0935308dd75", + "bfa3c1b6e4071636", + "bfebdb46377c8fb0", + "bfc99dc1c64a18d9", + "3fe0660e0a4daf8d", + "7ff8000000000110", + "7ff8000000000111", + "c010081a03b877b9", + "3fdb133bc75c84a1", + "3fc10dff66e7cb68", + "bfd88c6f31816a57", + "bfd724efc7284790", + "3fd88d749b94a193", + "7ff8000000000118", + "7ff8000000000119", + "7ff800000000011a", + "3fe3cdb34c70a853", + "bff33224d4544c61", + "3fe6734c07691764", + "3fe3c7427dd9ed12", + "bfc3cd6d56ab9a70", + "7ff8000000000120", + "7ff8000000000121", + "7ff8000000000122", + "7ff8000000000123", + "bfe3ae7b46ac478f", + "3fba83fcf465eeb5", + "bfde619b5fdd9fef", + "3fe1975d81b351be", + "7ff8000000000128", + "7ff8000000000129", + "7ff800000000012a", + "7ff800000000012b", + "7ff800000000012c", + "bfdc48d634b561fb", + "bfd676b52db3ce4c", + "bfe4a6ae19c768ed", + "7ff8000000000130", + "7ff8000000000131", + "7ff8000000000132", + "7ff8000000000133", + "7ff8000000000134", + "7ff8000000000135", + "bff102461d59e0bd", + "bfe5b541dddbde12", + "7ff8000000000138", + "7ff8000000000139", + "7ff800000000013a", + "7ff800000000013b", + "7ff800000000013c", + "7ff800000000013d", + "7ff800000000013e", + "400b2231b54c6faf" + ], + "output_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "bff33224d4544c61", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "info": 0 + }, + { + "id": "ordered-two-swap-cycle-U-C", + "provenance": "supplied-storage", + "uplo": "U", + "way": "C", + "n": 6, + "input_a_hex_col_major": [ + "3fd0000000000000", + "3ff4000000000000", + "4002000000000000", + "400a000000000000", + "4011000000000000", + "4015000000000000", + "4019000000000000", + "401d000000000000", + "4020800000000000", + "4022800000000000", + "4024800000000000", + "4026800000000000", + "4028800000000000", + "402a800000000000", + "402c800000000000", + "402e800000000000", + "4030400000000000", + "4031400000000000", + "4032400000000000", + "4033400000000000", + "4034400000000000", + "4035400000000000", + "4036400000000000", + "4037400000000000", + "4038400000000000", + "4039400000000000", + "403a400000000000", + "403b400000000000", + "403c400000000000", + "403d400000000000", + "403e400000000000", + "403f400000000000", + "4040200000000000", + "4040a00000000000", + "4041200000000000", + "4041a00000000000" + ], + "input_e_hex": [ + "408f3c0000000000", + "408f440000000000", + "408f4c0000000000", + "408f540000000000", + "408f5c0000000000", + "408f640000000000" + ], + "ipiv_signed_1based": [ + 1, + 2, + -4, + -1, + 5, + 6 + ], + "output_a_hex_col_major": [ + "3fd0000000000000", + "3ff4000000000000", + "4002000000000000", + "400a000000000000", + "4011000000000000", + "4015000000000000", + "4019000000000000", + "401d000000000000", + "4020800000000000", + "4022800000000000", + "4024800000000000", + "4026800000000000", + "4028800000000000", + "402a800000000000", + "402c800000000000", + "402e800000000000", + "4030400000000000", + "4031400000000000", + "4032400000000000", + "4033400000000000", + "0000000000000000", + "4035400000000000", + "4036400000000000", + "4037400000000000", + "403b400000000000", + "4039400000000000", + "4038400000000000", + "403a400000000000", + "403c400000000000", + "403d400000000000", + "4040a00000000000", + "403f400000000000", + "403e400000000000", + "4040200000000000", + "4041200000000000", + "4041a00000000000" + ], + "output_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4034400000000000", + "0000000000000000", + "0000000000000000" + ], + "info": 0 + }, + { + "id": "ordered-two-swap-cycle-U-R", + "provenance": "supplied-storage", + "uplo": "U", + "way": "R", + "n": 6, + "input_a_hex_col_major": [ + "3fd0000000000000", + "3ff4000000000000", + "4002000000000000", + "400a000000000000", + "4011000000000000", + "4015000000000000", + "4019000000000000", + "401d000000000000", + "4020800000000000", + "4022800000000000", + "4024800000000000", + "4026800000000000", + "4028800000000000", + "402a800000000000", + "402c800000000000", + "402e800000000000", + "4030400000000000", + "4031400000000000", + "4032400000000000", + "4033400000000000", + "0000000000000000", + "4035400000000000", + "4036400000000000", + "4037400000000000", + "4038400000000000", + "4039400000000000", + "403a400000000000", + "403b400000000000", + "403c400000000000", + "403d400000000000", + "403e400000000000", + "403f400000000000", + "4040200000000000", + "4040a00000000000", + "4041200000000000", + "4041a00000000000" + ], + "input_e_hex": [ + "408f3c0000000000", + "408f440000000000", + "408f4c0000000000", + "408f540000000000", + "408f5c0000000000", + "408f640000000000" + ], + "ipiv_signed_1based": [ + 1, + 2, + -4, + -1, + 5, + 6 + ], + "output_a_hex_col_major": [ + "3fd0000000000000", + "3ff4000000000000", + "4002000000000000", + "400a000000000000", + "4011000000000000", + "4015000000000000", + "4019000000000000", + "401d000000000000", + "4020800000000000", + "4022800000000000", + "4024800000000000", + "4026800000000000", + "4028800000000000", + "402a800000000000", + "402c800000000000", + "402e800000000000", + "4030400000000000", + "4031400000000000", + "4032400000000000", + "4033400000000000", + "408f540000000000", + "4035400000000000", + "4036400000000000", + "4037400000000000", + "403a400000000000", + "4039400000000000", + "403b400000000000", + "4038400000000000", + "403c400000000000", + "403d400000000000", + "4040200000000000", + "403f400000000000", + "4040a00000000000", + "403e400000000000", + "4041200000000000", + "4041a00000000000" + ], + "output_e_hex": [ + "408f3c0000000000", + "408f440000000000", + "408f4c0000000000", + "408f540000000000", + "408f5c0000000000", + "408f640000000000" + ], + "info": 0 + }, + { + "id": "special-value-storage-U-C", + "provenance": "supplied-storage-special-bits", + "uplo": "U", + "way": "C", + "n": 6, + "input_a_hex_col_major": [ + "8000000000000000", + "7ff0000000000000", + "fff0000000000000", + "7ff8000000004321", + "3ff0000000000000", + "0000000000000000", + "8000000000000000", + "7ff0000000000000", + "fff0000000000000", + "7ff8000000004321", + "3ff0000000000000", + "0000000000000000", + "8000000000000000", + "7ff0000000000000", + "fff0000000000000", + "7ff8000000004321", + "3ff0000000000000", + "0000000000000000", + "8000000000000000", + "7ff0000000000000", + "fff0000000000000", + "7ff8000000004321", + "3ff0000000000000", + "0000000000000000", + "8000000000000000", + "7ff0000000000000", + "fff0000000000000", + "7ff8000000004321", + "3ff0000000000000", + "0000000000000000", + "8000000000000000", + "7ff0000000000000", + "fff0000000000000", + "7ff8000000004321", + "3ff0000000000000", + "0000000000000000" + ], + "input_e_hex": [ + "8000000000000000", + "7ff0000000000000", + "fff0000000000000", + "7ff8000000004321", + "3ff0000000000000", + "0000000000000000" + ], + "ipiv_signed_1based": [ + 1, + 2, + -4, + -1, + 5, + 6 + ], + "output_a_hex_col_major": [ + "8000000000000000", + "7ff0000000000000", + "fff0000000000000", + "7ff8000000004321", + "3ff0000000000000", + "0000000000000000", + "8000000000000000", + "7ff0000000000000", + "fff0000000000000", + "7ff8000000004321", + "3ff0000000000000", + "0000000000000000", + "8000000000000000", + "7ff0000000000000", + "fff0000000000000", + "7ff8000000004321", + "3ff0000000000000", + "0000000000000000", + "8000000000000000", + "7ff0000000000000", + "0000000000000000", + "7ff8000000004321", + "3ff0000000000000", + "0000000000000000", + "7ff8000000004321", + "7ff0000000000000", + "8000000000000000", + "fff0000000000000", + "3ff0000000000000", + "0000000000000000", + "7ff8000000004321", + "7ff0000000000000", + "8000000000000000", + "fff0000000000000", + "3ff0000000000000", + "0000000000000000" + ], + "output_e_hex": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "fff0000000000000", + "0000000000000000", + "0000000000000000" + ], + "info": 0 + }, + { + "id": "special-value-storage-U-R", + "provenance": "supplied-storage-special-bits", + "uplo": "U", + "way": "R", + "n": 6, + "input_a_hex_col_major": [ + "8000000000000000", + "7ff0000000000000", + "fff0000000000000", + "7ff8000000004321", + "3ff0000000000000", + "0000000000000000", + "8000000000000000", + "7ff0000000000000", + "fff0000000000000", + "7ff8000000004321", + "3ff0000000000000", + "0000000000000000", + "8000000000000000", + "7ff0000000000000", + "fff0000000000000", + "7ff8000000004321", + "3ff0000000000000", + "0000000000000000", + "8000000000000000", + "7ff0000000000000", + "0000000000000000", + "7ff8000000004321", + "3ff0000000000000", + "0000000000000000", + "8000000000000000", + "7ff0000000000000", + "fff0000000000000", + "7ff8000000004321", + "3ff0000000000000", + "0000000000000000", + "8000000000000000", + "7ff0000000000000", + "fff0000000000000", + "7ff8000000004321", + "3ff0000000000000", + "0000000000000000" + ], + "input_e_hex": [ + "8000000000000000", + "7ff0000000000000", + "fff0000000000000", + "7ff8000000004321", + "3ff0000000000000", + "0000000000000000" + ], + "ipiv_signed_1based": [ + 1, + 2, + -4, + -1, + 5, + 6 + ], + "output_a_hex_col_major": [ + "8000000000000000", + "7ff0000000000000", + "fff0000000000000", + "7ff8000000004321", + "3ff0000000000000", + "0000000000000000", + "8000000000000000", + "7ff0000000000000", + "fff0000000000000", + "7ff8000000004321", + "3ff0000000000000", + "0000000000000000", + "8000000000000000", + "7ff0000000000000", + "fff0000000000000", + "7ff8000000004321", + "3ff0000000000000", + "0000000000000000", + "8000000000000000", + "7ff0000000000000", + "7ff8000000004321", + "7ff8000000004321", + "3ff0000000000000", + "0000000000000000", + "fff0000000000000", + "7ff0000000000000", + "7ff8000000004321", + "8000000000000000", + "3ff0000000000000", + "0000000000000000", + "fff0000000000000", + "7ff0000000000000", + "7ff8000000004321", + "8000000000000000", + "3ff0000000000000", + "0000000000000000" + ], + "output_e_hex": [ + "8000000000000000", + "7ff0000000000000", + "fff0000000000000", + "7ff8000000004321", + "3ff0000000000000", + "0000000000000000" + ], + "info": 0 + }, + { + "id": "ordered-two-swap-cycle-L-C", + "provenance": "supplied-storage", + "uplo": "L", + "way": "C", + "n": 6, + "input_a_hex_col_major": [ + "3fd0000000000000", + "3ff4000000000000", + "4002000000000000", + "400a000000000000", + "4011000000000000", + "4015000000000000", + "4019000000000000", + "401d000000000000", + "4020800000000000", + "4022800000000000", + "4024800000000000", + "4026800000000000", + "4028800000000000", + "402a800000000000", + "402c800000000000", + "402e800000000000", + "4030400000000000", + "4031400000000000", + "4032400000000000", + "4033400000000000", + "4034400000000000", + "4035400000000000", + "4036400000000000", + "4037400000000000", + "4038400000000000", + "4039400000000000", + "403a400000000000", + "403b400000000000", + "403c400000000000", + "403d400000000000", + "403e400000000000", + "403f400000000000", + "4040200000000000", + "4040a00000000000", + "4041200000000000", + "4041a00000000000" + ], + "input_e_hex": [ + "408f3c0000000000", + "408f440000000000", + "408f4c0000000000", + "408f540000000000", + "408f5c0000000000", + "408f640000000000" + ], + "ipiv_signed_1based": [ + 1, + 2, + -6, + -3, + 5, + 6 + ], + "output_a_hex_col_major": [ + "3fd0000000000000", + "3ff4000000000000", + "400a000000000000", + "4015000000000000", + "4011000000000000", + "4002000000000000", + "4019000000000000", + "401d000000000000", + "4022800000000000", + "4026800000000000", + "4024800000000000", + "4020800000000000", + "4028800000000000", + "402a800000000000", + "402c800000000000", + "0000000000000000", + "4030400000000000", + "4031400000000000", + "4032400000000000", + "4033400000000000", + "4034400000000000", + "4035400000000000", + "4036400000000000", + "4037400000000000", + "4038400000000000", + "4039400000000000", + "403a400000000000", + "403b400000000000", + "403c400000000000", + "403d400000000000", + "403e400000000000", + "403f400000000000", + "4040200000000000", + "4040a00000000000", + "4041200000000000", + "4041a00000000000" + ], + "output_e_hex": [ + "0000000000000000", + "0000000000000000", + "402e800000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "info": 0 + }, + { + "id": "ordered-two-swap-cycle-L-R", + "provenance": "supplied-storage", + "uplo": "L", + "way": "R", + "n": 6, + "input_a_hex_col_major": [ + "3fd0000000000000", + "3ff4000000000000", + "4002000000000000", + "400a000000000000", + "4011000000000000", + "4015000000000000", + "4019000000000000", + "401d000000000000", + "4020800000000000", + "4022800000000000", + "4024800000000000", + "4026800000000000", + "4028800000000000", + "402a800000000000", + "402c800000000000", + "0000000000000000", + "4030400000000000", + "4031400000000000", + "4032400000000000", + "4033400000000000", + "4034400000000000", + "4035400000000000", + "4036400000000000", + "4037400000000000", + "4038400000000000", + "4039400000000000", + "403a400000000000", + "403b400000000000", + "403c400000000000", + "403d400000000000", + "403e400000000000", + "403f400000000000", + "4040200000000000", + "4040a00000000000", + "4041200000000000", + "4041a00000000000" + ], + "input_e_hex": [ + "408f3c0000000000", + "408f440000000000", + "408f4c0000000000", + "408f540000000000", + "408f5c0000000000", + "408f640000000000" + ], + "ipiv_signed_1based": [ + 1, + 2, + -6, + -3, + 5, + 6 + ], + "output_a_hex_col_major": [ + "3fd0000000000000", + "3ff4000000000000", + "4015000000000000", + "4002000000000000", + "4011000000000000", + "400a000000000000", + "4019000000000000", + "401d000000000000", + "4026800000000000", + "4020800000000000", + "4024800000000000", + "4022800000000000", + "4028800000000000", + "402a800000000000", + "402c800000000000", + "408f4c0000000000", + "4030400000000000", + "4031400000000000", + "4032400000000000", + "4033400000000000", + "4034400000000000", + "4035400000000000", + "4036400000000000", + "4037400000000000", + "4038400000000000", + "4039400000000000", + "403a400000000000", + "403b400000000000", + "403c400000000000", + "403d400000000000", + "403e400000000000", + "403f400000000000", + "4040200000000000", + "4040a00000000000", + "4041200000000000", + "4041a00000000000" + ], + "output_e_hex": [ + "408f3c0000000000", + "408f440000000000", + "408f4c0000000000", + "408f540000000000", + "408f5c0000000000", + "408f640000000000" + ], + "info": 0 + }, + { + "id": "special-value-storage-L-C", + "provenance": "supplied-storage-special-bits", + "uplo": "L", + "way": "C", + "n": 6, + "input_a_hex_col_major": [ + "8000000000000000", + "7ff0000000000000", + "fff0000000000000", + "7ff8000000004321", + "3ff0000000000000", + "0000000000000000", + "8000000000000000", + "7ff0000000000000", + "fff0000000000000", + "7ff8000000004321", + "3ff0000000000000", + "0000000000000000", + "8000000000000000", + "7ff0000000000000", + "fff0000000000000", + "7ff8000000004321", + "3ff0000000000000", + "0000000000000000", + "8000000000000000", + "7ff0000000000000", + "fff0000000000000", + "7ff8000000004321", + "3ff0000000000000", + "0000000000000000", + "8000000000000000", + "7ff0000000000000", + "fff0000000000000", + "7ff8000000004321", + "3ff0000000000000", + "0000000000000000", + "8000000000000000", + "7ff0000000000000", + "fff0000000000000", + "7ff8000000004321", + "3ff0000000000000", + "0000000000000000" + ], + "input_e_hex": [ + "8000000000000000", + "7ff0000000000000", + "fff0000000000000", + "7ff8000000004321", + "3ff0000000000000", + "0000000000000000" + ], + "ipiv_signed_1based": [ + 1, + 2, + -6, + -3, + 5, + 6 + ], + "output_a_hex_col_major": [ + "8000000000000000", + "7ff0000000000000", + "7ff8000000004321", + "0000000000000000", + "3ff0000000000000", + "fff0000000000000", + "8000000000000000", + "7ff0000000000000", + "7ff8000000004321", + "0000000000000000", + "3ff0000000000000", + "fff0000000000000", + "8000000000000000", + "7ff0000000000000", + "fff0000000000000", + "0000000000000000", + "3ff0000000000000", + "0000000000000000", + "8000000000000000", + "7ff0000000000000", + "fff0000000000000", + "7ff8000000004321", + "3ff0000000000000", + "0000000000000000", + "8000000000000000", + "7ff0000000000000", + "fff0000000000000", + "7ff8000000004321", + "3ff0000000000000", + "0000000000000000", + "8000000000000000", + "7ff0000000000000", + "fff0000000000000", + "7ff8000000004321", + "3ff0000000000000", + "0000000000000000" + ], + "output_e_hex": [ + "0000000000000000", + "0000000000000000", + "7ff8000000004321", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "info": 0 + }, + { + "id": "special-value-storage-L-R", + "provenance": "supplied-storage-special-bits", + "uplo": "L", + "way": "R", + "n": 6, + "input_a_hex_col_major": [ + "8000000000000000", + "7ff0000000000000", + "fff0000000000000", + "7ff8000000004321", + "3ff0000000000000", + "0000000000000000", + "8000000000000000", + "7ff0000000000000", + "fff0000000000000", + "7ff8000000004321", + "3ff0000000000000", + "0000000000000000", + "8000000000000000", + "7ff0000000000000", + "fff0000000000000", + "0000000000000000", + "3ff0000000000000", + "0000000000000000", + "8000000000000000", + "7ff0000000000000", + "fff0000000000000", + "7ff8000000004321", + "3ff0000000000000", + "0000000000000000", + "8000000000000000", + "7ff0000000000000", + "fff0000000000000", + "7ff8000000004321", + "3ff0000000000000", + "0000000000000000", + "8000000000000000", + "7ff0000000000000", + "fff0000000000000", + "7ff8000000004321", + "3ff0000000000000", + "0000000000000000" + ], + "input_e_hex": [ + "8000000000000000", + "7ff0000000000000", + "fff0000000000000", + "7ff8000000004321", + "3ff0000000000000", + "0000000000000000" + ], + "ipiv_signed_1based": [ + 1, + 2, + -6, + -3, + 5, + 6 + ], + "output_a_hex_col_major": [ + "8000000000000000", + "7ff0000000000000", + "0000000000000000", + "fff0000000000000", + "3ff0000000000000", + "7ff8000000004321", + "8000000000000000", + "7ff0000000000000", + "0000000000000000", + "fff0000000000000", + "3ff0000000000000", + "7ff8000000004321", + "8000000000000000", + "7ff0000000000000", + "fff0000000000000", + "fff0000000000000", + "3ff0000000000000", + "0000000000000000", + "8000000000000000", + "7ff0000000000000", + "fff0000000000000", + "7ff8000000004321", + "3ff0000000000000", + "0000000000000000", + "8000000000000000", + "7ff0000000000000", + "fff0000000000000", + "7ff8000000004321", + "3ff0000000000000", + "0000000000000000", + "8000000000000000", + "7ff0000000000000", + "fff0000000000000", + "7ff8000000004321", + "3ff0000000000000", + "0000000000000000" + ], + "output_e_hex": [ + "8000000000000000", + "7ff0000000000000", + "fff0000000000000", + "7ff8000000004321", + "3ff0000000000000", + "0000000000000000" + ], + "info": 0 + } + ] +} diff --git a/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/test/test.js b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/test/test.js new file mode 100644 index 000000000000..5a67f98cbfd1 --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/test/test.js @@ -0,0 +1,243 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ +'use strict'; + +var tape = require( 'tape' ); +var Float64Array = require( '@stdlib/array/float64' ); +var Int32Array = require( '@stdlib/array/int32' ); +var SharedArrayBuffer = require( '@stdlib/array/shared-buffer' ); +var Symbol = require( '@stdlib/symbol/ctor' ); +var getGlobal = require( '@stdlib/utils/global' ); +var main = require( './../lib/main.js' ); +var publicMain = require( './../lib' ); +var common = require( './common.js' ); + +tape('main export is a function', function test(t) { + t.ok( true, __filename ); + t.strictEqual(typeof publicMain, 'function'); + t.end(); +}); + +tape( 'public routes reject shared backing storage before writes', { + 'skip': SharedArrayBuffer === null +}, function test( t ) { + var routes; + var clone; + var whole; + var a; + var e; + var p; + whole = new SharedArrayBuffer( 128 ); + clone = getGlobal().structuredClone; + clone = ( clone ) ? clone( whole ) : whole; + a = new Float64Array( whole, 0, 4 ); + e = new Float64Array( clone, 16, 2 ); + p = new Int32Array( [ -1, -2 ] ); + a.set( [ 1, 92, 3, 4 ] ); + routes = [ main, publicMain ]; + routes.forEach( function eachRoute( fn ) { + t.throws( function call() { + fn( 'column-major', 'upper', 'convert', 2, a, 2, e, p ); + }, TypeError, 'shared identity cannot establish disjoint storage' ); + t.deepEqual( a, new Float64Array( [ 1, 92, 3, 4 ] ), 'no A writes' ); + if ( Symbol.toStringTag ) { + Object.defineProperty( whole, Symbol.toStringTag, { + 'value': 'ArrayBuffer', + 'configurable': true + }); + t.throws( function call() { + fn( 'column-major', 'upper', 'convert', 2, a, 2, e, p ); + }, TypeError, 'spoofed tag cannot replace intrinsic branding' ); + } + } ); + t.end(); +} ); + +tape('JavaScript factor storage matches actual pinned ROOK/RK directional fixtures', function test(t) { + common.corpus(t, main); + t.end(); +}); +tape('public main supports both padded major orders', function test(t) { + var order; + var lda; + var a; + var e; + var f; + var i; + var j; + var k; + var n; + var p; + var s; + var x; + for (k = 0; k < common.fixtures.length; k++) { + f = common.fixtures[k]; + n = f.n; + if (n === 0) { + continue; + } + for (x = 0; x < 2; x++) { + order = ( x ) ? 'row-major' : 'column-major'; + lda = n + 2; + a = new Float64Array(lda * n); + e = new Float64Array(n); + p = new Int32Array(f.ipiv_signed_1based); + s = common.pack(f, ( x ) ? lda : 1, ( x ) ? 1 : lda, 1, 1); + for (j = 0; j < n; j++) { + for (i = 0; i < n; i++) { + a[( x ) ? (i * lda) + j : i + (j * lda)] = s.args[3][s.args[6] + (i * s.args[4]) + (j * s.args[5])]; + } + e[j] = s.args[7][s.args[9] + j]; + } + t.strictEqual(publicMain(order, s.args[0], s.args[1], n, a, lda, e, p), 0, f.id + ' ' + order); + for (j = 0; j < n; j++) { + for (i = 0; i < n; i++) { + s.a[3 + s.args[6] + (i * s.args[4]) + (j * s.args[5])] = a[( x ) ? (i * lda) + j : i + (j * lda)]; + } + s.e[3 + s.args[9] + j] = e[j]; + } + t.ok(common.equal(s.a, s.expectedA), 'full A'); + t.ok(common.equal(s.e, s.expectedE), 'full E'); + t.deepEqual(p, new Int32Array(f.ipiv_signed_1based), 'unchanged pivots'); + } + } + t.end(); +}); +tape('malformed pivots and indexed metadata reject before routine writes', function test(t) { + var bad; + var a; + var e; + var i; + var p; + bad = [ + [ + 0, + 2 + ], + [ + -1, + 2 + ], + [ + 1, + -2 + ], + [ + -2147483648, + -1 + ], + [ + 3, + 2 + ], + [ + -3, + -2 + ] + ]; + for (i = 0; i < bad.length; i++) { + a = new Float64Array([ + 1, + 91, + 3, + 4 + ]); + e = new Float64Array([ + 8, + 9 + ]); + p = new Int32Array(bad[i]); + t.throws(publicMain.bind(null, 'column-major', 'upper', 'convert', 2, a, 2, e, p), RangeError); + t.deepEqual(a, new Float64Array([ + 1, + 91, + 3, + 4 + ]), 'no A writes'); + t.deepEqual(e, new Float64Array([ + 8, + 9 + ]), 'no E writes'); + } + a = new Float64Array(16); + e = new Float64Array(4); + p = new Int32Array([ + 1, + 2, + 3, + 4 + ]); + t.throws(function call() { + publicMain.ndarray('upper', 'convert', 4, a, 1, 1, 0, e, 1, 0, p, 1, 0); + }, RangeError, 'matrix collisions'); + t.throws(function call() { + publicMain.ndarray('upper', 'convert', 4, a, 1, 4, 0, e, 0, 0, p, 1, 0); + }, RangeError, 'mutable broadcast E'); + t.throws(function call() { + publicMain.ndarray('upper', 'convert', 4, a, 9007199254740991, 4, 0, e, 1, 0, p, 1, 0); + }, RangeError, 'inexact indexing'); + t.deepEqual(a, new Float64Array(16), 'invalid indexing never writes A'); + t.deepEqual(e, new Float64Array(4), 'invalid indexing never writes E'); + t.end(); +}); +tape('scalar precedence, validated empty views and signed target-one pairs', function test(t) { + var a; + var e; + var p; + t.strictEqual(publicMain('column-major', 'upper', 'convert', 0, null, 1, null, null), 0); + t.strictEqual(publicMain.ndarray('lower', 'revert', 0, null, NaN, null, null, null, null, null, null, null, null), 0); + t.throws(function call() { + publicMain('column-major', 'upper', 'convert', 0, null, 0, null, null); + }, RangeError, 'LDA validates before empty'); + t.throws(function call() { + publicMain('column-major', 'upper', 'convert', 2147483648, null, 2147483648, null, null); + }, RangeError, 'N cap precedes buffers'); + t.throws(function call() { + publicMain.ndarray('upper', 'convert', 2147483648, null, 0, 0, 0, null, 0, 0, null, 0, 0); + }, RangeError, 'ndarray N cap'); + t.throws(function call() { + publicMain('bad', 'upper', 'convert', 0, null, 1, null, null); + }, TypeError); + t.throws(function call() { + publicMain.ndarray('upper', 'bad', 0, null, 0, 0, 0, null, 0, 0, null, 0, 0); + }, TypeError); + a = new Float64Array([ + 2, + 77, + -0, + 4 + ]); + e = new Float64Array([ + 8, + 9 + ]); + p = new Int32Array([ + -1, + -2 + ]); + t.strictEqual(publicMain('column-major', 'upper', 'convert', 2, a, 2, e, p), 0); + t.strictEqual(1 / e[1], -Infinity, 'negative zero storage'); + t.strictEqual(1 / a[2], Infinity, 'canonical positive zero slot'); + t.deepEqual(p, new Int32Array([ + -1, + -2 + ]), 'different negatives stay signed'); + t.strictEqual(publicMain('column-major', 'upper', 'revert', 2, a, 2, e, p), 0); + t.strictEqual(1 / a[2], -Infinity, 'reversion restores sign'); + t.end(); +}); diff --git a/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/test/test.native.js b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/test/test.native.js new file mode 100644 index 000000000000..a3fd3f3b179b --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/test/test.native.js @@ -0,0 +1,280 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ +'use strict'; + +var resolve = require( 'path' ).resolve; +var tape = require( 'tape' ); +var tryRequire = require( '@stdlib/utils/try-require' ); +var Float64Array = require( '@stdlib/array/float64' ); +var Int32Array = require( '@stdlib/array/int32' ); +var SharedArrayBuffer = require( '@stdlib/array/shared-buffer' ); +var getGlobal = require( '@stdlib/utils/global' ); +var common = require( './common.js' ); +var eligibility = require( './../lib/can_use_native.js' ); +var factory = require( './../lib/factory.js' ); +var base = require( './../lib/base.js' ); +var addon = tryRequire(resolve(__dirname, './../src/addon.node')); +var native = tryRequire(resolve(__dirname, './../lib/native.js')); +var opts = { + 'skip': native instanceof Error +}; + +tape('main export is a function', opts, function test(t) { + t.ok( true, __filename ); + t.strictEqual(typeof native, 'function'); + t.end(); +}); + +tape( 'raw addon rejects physical overlap across distinct shared identities', { + 'skip': native instanceof Error || SharedArrayBuffer === null +}, function test( t ) { + var whole; + var clone; + var a; + var e; + var p; + whole = new SharedArrayBuffer( 128 ); + clone = getGlobal().structuredClone; + clone = ( clone ) ? clone( whole ) : whole; + a = new Float64Array( whole, 0, 4 ); + e = new Float64Array( clone, 16, 2 ); + p = new Int32Array( [ -1, -2 ] ); + a.set( [ 1, 92, 3, 4 ] ); + t.throws( function call() { + addon( 121, 67, 2, a, 1, 2, 0, e, 1, 0, p, 1, 0 ); + }, RangeError, 'physical indexed envelopes overlap' ); + t.deepEqual( a, new Float64Array( [ 1, 92, 3, 4 ] ), 'no A writes' ); + t.deepEqual( p, new Int32Array( [ -1, -2 ] ), 'no P writes' ); + t.end(); +} ); + +tape('actual compiled native addon matches independent-direction fixtures', opts, function test(t) { + t.strictEqual(typeof addon, 'function', 'actual node binary export loaded'); + common.corpus(t, native); + t.end(); +}); +tape('native eligibility covers complete sums and valid wide singleton fallback', function test(t) { + var calls; + var fn; + var a; + var e; + var p; + calls = 0; + fn = factory(function dispatch() { + if (eligibility(arguments)) { + calls += 1; + return base.apply(null, arguments); + } + return base.apply(null, arguments); + }); + a = new Float64Array([5]); + e = new Float64Array([7]); + p = new Int32Array([1]); + t.strictEqual(eligibility([ + 121, + 67, + 2, + null, + 2000000000, + 1000000000, + 0, + null, + 1, + 0, + null, + 1, + 0 + ]), false, 'full corner sum exceeds native width'); + t.strictEqual(eligibility([ + 121, + 67, + 2, + null, + 1, + 2, + 2147483646, + null, + 1, + 0, + null, + 1, + 0 + ]), false, 'offset plus active corner'); + t.strictEqual(eligibility([ + 121, + 67, + 2, + null, + 1, + 2, + 0, + null, + 2, + 2147483646, + null, + 1, + 0 + ]), false, 'vector offset plus delta'); + t.strictEqual(fn.ndarray('upper', 'convert', 1, a, 9007199254740991, -9007199254740991, 0, e, 9007199254740991, 0, p, -9007199254740991, 0), 0); + t.strictEqual(calls, 0, 'wide unused metadata goes to JavaScript'); + t.strictEqual(e[0], 0); + t.strictEqual(a[0], 5); + t.end(); +}); +tape('raw addon rejects malformed and fractional inputs before mutation', opts, function test(t) { + var slots; + var args; + var a; + var e; + var i; + var p; + var x; + a = new Float64Array([ + 1, + 2, + 3, + 4 + ]); + e = new Float64Array([ + 8, + 9 + ]); + p = new Int32Array([ + -1, + -2 + ]); + args = [ + 121, + 67, + 2, + a, + 1, + 2, + 0, + e, + 1, + 0, + p, + 1, + 0 + ]; + slots = [ + 0, + 1, + 2, + 4, + 5, + 6, + 8, + 9, + 11, + 12 + ]; + for (i = 0; i < slots.length; i++) { + x = args.slice(); + x[slots[i]] += 0.5; + t.throws(addon.apply.bind(addon, null, x), RangeError, 'fractional scalar ' + slots[i]); + } + x = args.slice(); + x[4] = 0; + x[5] = 0; + x[8] = 0; + x[11] = 0; + x[2] = 2147483647; + t.throws(function call() { + addon.apply(null, x); + }, RangeError, 'tiny broadcast rejected before workspace allocation'); + x = args.slice(); + x[4] = 1; + x[5] = 1; + t.throws(function call() { + addon.apply(null, x); + }, RangeError, 'full square collisions'); + x = args.slice(); + x[8] = 0; + t.throws(function call() { + addon.apply(null, x); + }, RangeError, 'mutable E broadcast'); + x = args.slice(); + x[10] = new Int32Array([ + -1, + 0 + ]); + t.throws(function call() { + addon.apply(null, x); + }, RangeError, 'late malformed pivots'); + t.deepEqual(a, new Float64Array([ + 1, + 2, + 3, + 4 + ]), 'no A writes'); + t.deepEqual(e, new Float64Array([ + 8, + 9 + ]), 'no E writes'); + t.deepEqual(p, new Int32Array([ + -1, + -2 + ]), 'no P writes'); + t.strictEqual(addon(121, 67, 0, null, NaN, null, null, null, null, null, null, null, null), 0, 'validated empty raw addon reads no buffers/metadata'); + t.end(); +}); +tape('native bridge accepts disjoint indexed subviews and ignores exposed metadata getters', opts, function test(t) { + var overlapping; + var reads; + var whole; + var a; + var e; + var p; + whole = new Float64Array(16); + a = new Float64Array(whole.buffer, 8, 4); + e = new Float64Array(whole.buffer, 64, 2); + p = new Int32Array(whole.buffer, 96, 2); + reads = 0; + a.set([ + 1, + 92, + 3, + 4 + ]); + e.set([ + 8, + 9 + ]); + p.set([ + -1, + -2 + ]); + Object.defineProperty(a, 'buffer', { + 'get': function get() { + reads += 1; + throw new Error('untrusted getter'); + } + }); + t.strictEqual(native('column-major', 'upper', 'convert', 2, a, 2, e, p), 0); + t.strictEqual(e[1], 3); + t.strictEqual(reads, 0, 'captured intrinsic metadata'); + t.strictEqual(native('column-major', 'upper', 'revert', 2, a, 2, e, p), 0); + t.strictEqual(a[2], 3); + overlapping = new Float64Array(whole.buffer, 16, 2); + t.throws(function call() { + native('column-major', 'upper', 'convert', 2, a, 2, overlapping, p); + }, RangeError, 'overlapping indexed envelopes'); + t.end(); +}); From a384e797355d421f56c8d2bc7119d4b97920377a Mon Sep 17 00:00:00 2001 From: Benjamin Date: Sat, 3 Oct 2026 01:31:46 +0200 Subject: [PATCH 2/2] fix: correct proposed JavaScript engine floor --- lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/package.json b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/package.json index 3c3bca109b76..535d9bd375ae 100644 --- a/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/package.json +++ b/lib/node_modules/@stdlib/lapack/base/dsyconvf-rook/package.json @@ -38,7 +38,7 @@ "dependencies": {}, "devDependencies": {}, "engines": { - "node": ">=0.10.0", + "node": ">=8.0.0", "npm": ">2.7.0" }, "os": [