diff --git a/lib/node_modules/@stdlib/lapack/base/dlasyf/NOTICE b/lib/node_modules/@stdlib/lapack/base/dlasyf/NOTICE new file mode 100644 index 000000000000..f617b9bbbb04 --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dlasyf/NOTICE @@ -0,0 +1,50 @@ +This package derives the DLASYF Bunch-Kaufman panel algorithm and narrow private DGEMV/DGEMMTR updates from Reference-LAPACK commit 2e5d9c1273435fbd953adb294ed603e4789afaba. DGEMMTR author: Martin Koehler. Original source and license remain pinned in the contribution evidence. Signed one-based pivots and operation order are retained. The safe empty KB-only branch is new package behavior, not unchanged reference parity. + +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/dlasyf/README.md b/lib/node_modules/@stdlib/lapack/base/dlasyf/README.md new file mode 100644 index 000000000000..4a31ca5843e6 --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dlasyf/README.md @@ -0,0 +1,367 @@ + + +# dlasyf + +> Compute a partial symmetric indefinite factorization. + +
+ +Computes a partial Bunch-Kaufman factorization of a real symmetric matrix, using the selected upper or lower triangle. The diagonal factor has 1-by-1 and 2-by-2 blocks. The routine factors at most `NB` columns, updates the remaining selected triangle, and reports the number of factored columns separately from its status. + +When `N<=NB`, the factorization is complete. Otherwise, a blocked driver must continue from the remaining unfactored matrix; this call alone does not produce a complete factorization or solve a system. + +
+ + + +
+ +## Usage + +```javascript +var dlasyf = require( '@stdlib/lapack/base/dlasyf' ); +``` + +#### dlasyf( order, uplo, N, NB, KB, A, LDA, IPIV, W, LDW ) + +Factors a panel in place and returns a numeric `INFO` status. The factored-column count is written to `KB[0]`. + +```javascript +var Float64Array = require( '@stdlib/array/float64' ); +var Int32Array = require( '@stdlib/array/int32' ); + +// Upper storage of a symmetric 2x2 block; 999 guards the ignored triangle: +var A = new Float64Array( [ 0.0, 4.0, 999.0, 0.0 ] ); +var W = new Float64Array( 4 ); +var IPIV = new Int32Array( 2 ); +var KB = new Int32Array( 1 ); + +var info = dlasyf( 'row-major', 'upper', 2, 2, KB, A, 2, IPIV, W, 2 ); +// returns 0 +// KB => [ 2 ] +// IPIV => [ -1, -1 ] +// A => [ 0.0, 4.0, 999.0, 0.0 ] +``` + +The function has the following parameters: + +- **order**: `'row-major'` (`101`) or `'column-major'` (`102`), applied to both `A` and `W`. +- **uplo**: `'upper'` (`121`) or `'lower'` (`122`). +- **N**: nonnegative safe integer matrix order, at most `2147483647`. +- **NB**: safe integer panel width, at least `2` and at most `2147483647`; may exceed `N`. +- **KB**: output `Int32Array` with at least one element. `KB[0]` becomes the number of columns factored. +- **A**: input/output `Float64Array` containing a full `N`-by-`N` matrix view. Only the selected triangle is read or modified. +- **LDA**: matrix leading dimension, at least `max(1,N)`. +- **IPIV**: output `Int32Array` with `N` indexed entries. Produced pivots remain signed and **1-based**. +- **W**: output scratch `Float64Array` containing a full `N`-by-`NB` view. +- **LDW**: scratch leading dimension; at least `max(1,N)` for column-major order, and at least `NB` for row-major order. + +In row-major order, `A(i,j)=A[i*LDA+j]` and `W(i,j)=W[i*LDW+j]`. In column-major order, `A(i,j)=A[i+j*LDA]` and `W(i,j)=W[i+j*LDW]`. Indexing is relative to the first element of each typed-array view, including its actual byte offset. + + + +#### dlasyf.ndarray( uplo, N, NB, KB, offsetKB, A, strideA1, strideA2, offsetA, IPIV, strideIPIV, offsetIPIV, W, strideW1, strideW2, offsetW ) + +Factors a panel using explicit element strides and offsets. `KB[offsetKB]` receives the count, and the function returns numeric `INFO`. + +```javascript +var Float64Array = require( '@stdlib/array/float64' ); +var Int32Array = require( '@stdlib/array/int32' ); + +var A = new Float64Array( [ 9.0, 0.0, 9.0 ] ); +var W = new Float64Array( 4 ); +var IPIV = new Int32Array( [ 8, 0, 8 ] ); +var KB = new Int32Array( [ 7, 9, 7 ] ); + +var info = dlasyf.ndarray( 'upper', 1, 2, KB, 1, A, 1, 1, 1, IPIV, 1, 1, W, 2, 1, 1 ); +// returns 1 +// KB => [ 7, 1, 7 ] +// IPIV => [ 8, 1, 8 ] +// A => [ 9.0, 0.0, 9.0 ] +``` + +The additional parameters are `offsetKB`, matrix row/column strides `strideA1`/`strideA2`, matrix starting index `offsetA`, pivot stride/starting index `strideIPIV`/`offsetIPIV`, and scratch row/column strides and starting index `strideW1`/`strideW2`/`offsetW`. + +The interfaces index `A(i,j)=A[offsetA+i*strideA1+j*strideA2]`, `IPIV(i)=IPIV[offsetIPIV+i*strideIPIV]`, and `W(i,j)=W[offsetW+i*strideW1+j*strideW2]`. All strides/offsets are in elements relative to each typed-array view; positive and negative independent strides are supported. + +
+ + + +
+ +## Notes + +- `INFO=0` indicates normal completion. Positive `INFO` identifies the first encountered exactly-zero diagonal entry of `D` using its global 1-based index. A singular panel still completes and writes valid `KB` and pivots; positive status does not establish invertibility. +- `KB=N` when `N<=NB`; otherwise `KB` is `NB` or `NB-1`. Upper storage produces only the last `KB` pivot entries; lower storage produces only the first `KB`. All other pivot entries remain unchanged. Incoming pivot contents are not algorithmic input and are not validated or initialized. +- Pivots use ordinary signed 1-based Bunch-Kaufman encoding. Positive `p` identifies a 1-by-1 block and interchange target row `p-1`; equal adjacent negative values identify a 2-by-2 block and its target. Upper blocks are traversed downward and lower blocks upward. This is different from the distinct-negative rook-pivot encoding and the nonnegative zero-based convention of `dgttrf`. +- The ignored matrix triangle, matrix padding, and guards remain unchanged. `W` is mutable output scratch; its prior contents do not affect defined results. Unwritten scratch entries remain unchanged and are unspecified as numerical results. The routine does not clear the whole workspace. +- Finite stored-triangle inputs are the reference-comparison domain. Ignored storage and incoming scratch may contain NaNs. Active NaN/Infinity inputs and overflow of intermediate arithmetic have no universal factorization or bit-parity guarantee. +- For `N>0`, the full `N`-by-`N` matrix, `N`-by-`NB` scratch, `N`-element pivot view, and the one-element `KB` view must fit their buffers. All active metadata/index arithmetic must use exact safe integers. Mutable matrix/scratch indexing must be injective; mutable vectors cannot have zero stride when their extent exceeds one. +- Every active actual typed-array backing store must be an ordinary `ArrayBuffer`. `SharedArrayBuffer`-backed views are rejected with `TypeError` before routine-owned writes, including shared storage returned by `structuredClone`. Shadowed buffer/length properties do not change the intrinsic dtype/backing requirement. TypeScript typed-array declarations cannot express this runtime precondition. +- The four active views must have pairwise disjoint conservative **indexed-byte envelopes**, even if interleaved active slots differ. Disjoint subviews of one ordinary `ArrayBuffer` are allowed. The caller must exclude exotic ordinary buffers whose physical storage is externally aliased by foreign addons; the native bridge also checks actual pointer-byte envelopes. +- For `N=0`, after validating scalar selectors, `N`, `NB>=2`, standard-interface `LDA`/`LDW`, and the active `KB` scalar, the function writes `KB[0]=0` (or `KB[offsetKB]=0`) and returns `0`. It does not inspect `A`, `IPIV`, `W`, or unused ndarray metadata. Inactive storage aliased to `KB` can observe that scalar's backing-byte change. This safe empty behavior is defined by this package; it is not unchanged Reference-LAPACK empty-input parity. +- Invalid selectors and active buffer types/backing stores throw `TypeError`. Invalid dimensions, active metadata, bounds, collisions, and envelope overlap throw `RangeError` before routine-owned writes. This excludes caller-defined getter side effects and unsupported concurrent external mutation. +- An unavailable addon or valid public metadata outside its configured helper integer range uses the validated JavaScript implementation. Native integer widths are not silently narrowed; rejected public preconditions remain errors. + +
+ + + +
+ +## Examples + + + +```javascript +var Float64Array = require( '@stdlib/array/float64' ); +var Int32Array = require( '@stdlib/array/int32' ); +var dlasyf = require( '@stdlib/lapack/base/dlasyf' ); + +var diagonal = [ 4.0, -3.0, 2.0, -1.0, 0.0, 6.0 ]; +var A = new Float64Array( 36 ); +var W = new Float64Array( 18 ); +var IPIV = new Int32Array( [ -99, -99, -99, -99, -99, -99 ] ); +var KB = new Int32Array( 1 ); +var info; +var i; +var j; + +// Only the upper triangle is input; 999 guards the ignored lower triangle: +for ( i = 0; i < 6; i++ ) { + for ( j = 0; j < 6; j++ ) { + if ( i === j ) { + A[ (i*6)+j ] = diagonal[ i ]; + } else if ( i > j ) { + A[ (i*6)+j ] = 999.0; + } + } +} + +// A singular partial panel still produces a valid factor count and pivots: +info = dlasyf( 'row-major', 'upper', 6, 3, KB, A, 6, IPIV, W, 3 ); +if ( info !== 5 || KB[ 0 ] !== 2 || IPIV[ 4 ] !== 5 || IPIV[ 5 ] !== 6 ) { + throw new Error( 'Unexpected partial factorization result.' ); +} +for ( i = 0; i < 4; i++ ) { + if ( IPIV[ i ] !== -99 ) { + throw new Error( 'Unfactored pivots changed.' ); + } +} +for ( i = 0; i < 6; i++ ) { + for ( j = 0; j < i; j++ ) { + if ( A[ (i*6)+j ] !== 999.0 ) { + throw new Error( 'Ignored triangle changed.' ); + } + } +} +console.log( 'INFO: %d; KB: %d', info, KB[ 0 ] ); +console.log( 'Pivots: %s', IPIV.join( ', ' ) ); + +// A lower 2x2 diagonal block has equal negative ordinary LAPACK pivots: +A = new Float64Array( [ 0.0, 999.0, 4.0, 0.0 ] ); +W = new Float64Array( 4 ); +IPIV = new Int32Array( 2 ); +info = dlasyf.ndarray( 'lower', 2, 2, KB, 0, A, 2, 1, 0, IPIV, 1, 0, W, 2, 1, 0 ); +if ( + info !== 0 || + KB[ 0 ] !== 2 || + IPIV[ 0 ] !== -2 || + IPIV[ 1 ] !== -2 || + A[ 1 ] !== 999.0 +) { + throw new Error( 'Unexpected 2x2 block result.' ); +} +console.log( '2x2 pivots: %s', IPIV.join( ', ' ) ); +``` + +
+ + + + + +* * * + +
+ +## C APIs + +
+ +The C interfaces retain signed 1-based ordinary pivots, numeric `INFO` and separate `KB` output. Integer metadata and outputs use the configured `LAPACK_INT`; calls use `API_SUFFIX`. Sufficient allocated storage is a caller precondition. + +
+ + + +
+ +### Usage + +```c +#include "stdlib/lapack/base/dlasyf.h" +``` + +#### c_dlasyf( layout, uplo, N, NB, KB, A, LDA, IPIV, W, LDW ) + +`layout` is `LAPACK_ROW_MAJOR` or `LAPACK_COL_MAJOR`; `uplo` is `LAPACK_UPPER_TRIANGLE` or `LAPACK_LOWER_TRIANGLE`. + +```c +LAPACK_INT API_SUFFIX(c_dlasyf)( const LAPACK_LAYOUT layout, const LAPACK_UPLO uplo, const LAPACK_INT N, const LAPACK_INT NB, LAPACK_INT *KB, double *A, const LAPACK_INT LDA, LAPACK_INT *IPIV, double *W, const LAPACK_INT LDW ); +``` + +Parameters have the same layout, dimensions, leading-dimension and output meanings as the JavaScript main interface. `KB` points to one output scalar; `A` is input/output, and `IPIV` and `W` are outputs. The function returns `INFO` normally, or a negative rejected argument position: layout `-1`, uplo `-2`, N `-3`, NB `-4`, KB `-5`, A `-6`, LDA `-7`, IPIV `-8`, W `-9`, LDW `-10`. + + + +#### c_dlasyf_ndarray( uplo, N, NB, KB, offsetKB, A, strideA1, strideA2, offsetA, IPIV, strideIPIV, offsetIPIV, W, strideW1, strideW2, offsetW ) + +Uses explicit element strides and offsets. + +```c +LAPACK_INT API_SUFFIX(c_dlasyf_ndarray)( const LAPACK_UPLO uplo, const LAPACK_INT N, const LAPACK_INT NB, LAPACK_INT *KB, const LAPACK_INT offsetKB, double *A, const LAPACK_INT strideA1, const LAPACK_INT strideA2, const LAPACK_INT offsetA, LAPACK_INT *IPIV, const LAPACK_INT strideIPIV, const LAPACK_INT offsetIPIV, double *W, const LAPACK_INT strideW1, const LAPACK_INT strideW2, const LAPACK_INT offsetW ); +``` + +Negative statuses identify the rejected 1-based argument: uplo `-1`, N `-2`, NB `-3`, KB `-4`, offsetKB `-5`, A `-6`, strideA1 `-7`, strideA2 `-8`, offsetA `-9`, IPIV `-10`, strideIPIV `-11`, offsetIPIV `-12`, W `-13`, strideW1 `-14`, strideW2 `-15`, offsetW `-16`. Matrix collisions map to the second matrix stride; overlapping physical envelopes map to the later buffer argument. + +Both C interfaces validate active geometry, representable address/index arithmetic, and conservative physical-byte-envelope disjointness before writes. Nonempty calls require valid sufficient allocations for all four views. For `N=0`, scalar validation and an active valid `KB` are still required; only that scalar is written, with inactive pointers and unused ndarray metadata untouched. This package-defined empty behavior is not an original-reference return. Pointer interfaces cannot infer allocation capacities. Configured `LAPACK_INT` and called BLAS helper integer widths must remain compatible without unchecked casts. + +
+ + + +
+ +### Examples + +```c +#include "stdlib/lapack/base/dlasyf.h" +#include "stdlib/lapack/base/shared.h" +#include + +int main( void ) { + double A[] = { 0.0, 4.0, 999.0, 0.0 }; + double W[ 4 ] = { 0.0, 0.0, 0.0, 0.0 }; + LAPACK_INT IPIV[ 2 ] = { 0, 0 }; + LAPACK_INT KB = 0; + LAPACK_INT info; + + info = API_SUFFIX(c_dlasyf)( LAPACK_ROW_MAJOR, LAPACK_UPPER_TRIANGLE, 2, 2, &KB, A, 2, IPIV, W, 2 ); + if ( info != 0 || KB != 2 || IPIV[ 0 ] != -1 || IPIV[ 1 ] != -1 || A[ 2 ] != 999.0 ) { + return 1; + } + printf( "INFO: %d; KB: %d\n", (int)info, (int)KB ); + return 0; +} +``` + +
+ + + +
+ + + +
+ +## References + +The factorization algorithm is adapted from [Reference-LAPACK `DLASYF`][lapack-source] at commit `2e5d9c1273435fbd953adb294ed603e4789afaba`. The package-local triangular update follows [DGEMMTR][dgemmtr-source], contributed by Martin Koehler (Max Planck Institute for Dynamics of Complex Technical Systems). The original copyright, conditions, and disclaimer are retained in the package [NOTICE][lapack-notice] and reproduced below for source and binary distributions. API adaptations, validation and safe empty behavior are package-defined. + +```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/dlasyf/benchmark/benchmark.js b/lib/node_modules/@stdlib/lapack/base/dlasyf/benchmark/benchmark.js new file mode 100644 index 000000000000..28d3f0abff48 --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dlasyf/benchmark/benchmark.js @@ -0,0 +1,148 @@ +/** +* @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 dlasyf = require( './../lib' ); + + +// FUNCTIONS // + +/** +* Creates a bounded reset-and-factor benchmark. +* +* @private +* @param {PositiveInteger} N - matrix order +* @param {PositiveInteger} NB - panel width +* @param {string} uplo - stored triangle +* @returns {Function} benchmark function +*/ +function createBenchmark( N, NB, uplo ) { + var original; + var IPIV; + var KB; + var A; + var W; + var i; + var j; + + original = new Float64Array( N*N ); + A = new Float64Array( N*N ); + W = new Float64Array( N*NB ); + IPIV = new Int32Array( N ); + KB = new Int32Array( 1 ); + for ( i = 0; i < N; i++ ) { + for ( j = 0; j < N; j++ ) { + if ( i === j ) { + original[ (i*N)+j ] = N + 2.0; + } else if ( ( uplo === 'upper' && i < j ) || ( uplo === 'lower' && i > j ) ) { + original[ (i*N)+j ] = 0.25; + } else { + original[ (i*N)+j ] = 999.0; + } + } + } + return benchmark; + + /** + * Benchmark function. + * + * @private + * @param {Benchmark} b - benchmark instance + */ + function benchmark( b ) { + var expected; + var start; + var info; + var stop; + var i; + + expected = ( N <= NB ) ? N : NB-1; + info = 0; + b.tic(); + for ( i = 0; i < b.iterations; i++ ) { + // Include resetting the changed input in each iteration: + A.set( original ); + info = dlasyf( 'row-major', uplo, N, NB, KB, A, N, IPIV, W, NB ); + if ( info !== 0 || KB[ 0 ] !== expected ) { + b.fail( 'should factor the expected nonsingular panel' ); + break; + } + } + b.toc(); + start = ( uplo === 'upper' ) ? N-expected : 0; + stop = start + expected; + for ( i = start; i < stop; i++ ) { + if ( IPIV[ i ] !== i+1 ) { + b.fail( 'should produce the expected identity pivot targets' ); + break; + } + } + if ( ( uplo === 'upper' && A[ N ] !== 999.0 ) || ( uplo === 'lower' && A[ 1 ] !== 999.0 ) ) { + b.fail( 'should preserve the ignored triangle' ); + } + b.pass( 'benchmark finished' ); + b.end(); + } +} + + +// MAIN // + +/** +* Main execution sequence. +* +* @private +*/ +function main() { + var options; + var sizes; + var uplos; + var width; + var name; + var fcn; + var i; + var j; + var k; + + options = { + 'iterations': 200, + 'repeats': 2 + }; + sizes = [ 8, 16 ]; + uplos = [ 'upper', 'lower' ]; + for ( i = 0; i < sizes.length; i++ ) { + for ( j = 0; j < uplos.length; j++ ) { + for ( k = 0; k < 2; k++ ) { + width = ( k === 1 ) ? sizes[ i ] : 4; + name = format( '%s:triangle=%s:N=%d:NB=%d', pkg, uplos[ j ], sizes[ i ], width ); + fcn = createBenchmark( sizes[ i ], width, uplos[ j ] ); + bench( name, options, fcn ); + } + } + } +} + +main(); diff --git a/lib/node_modules/@stdlib/lapack/base/dlasyf/benchmark/benchmark.ndarray.js b/lib/node_modules/@stdlib/lapack/base/dlasyf/benchmark/benchmark.ndarray.js new file mode 100644 index 000000000000..cd42a40b56b5 --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dlasyf/benchmark/benchmark.ndarray.js @@ -0,0 +1,148 @@ +/** +* @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 dlasyf = require( './../lib' ).ndarray; + + +// FUNCTIONS // + +/** +* Creates a bounded reset-and-factor benchmark. +* +* @private +* @param {PositiveInteger} N - matrix order +* @param {PositiveInteger} NB - panel width +* @param {string} uplo - stored triangle +* @returns {Function} benchmark function +*/ +function createBenchmark( N, NB, uplo ) { + var original; + var IPIV; + var KB; + var A; + var W; + var i; + var j; + + original = new Float64Array( N*N ); + A = new Float64Array( N*N ); + W = new Float64Array( N*NB ); + IPIV = new Int32Array( N ); + KB = new Int32Array( 1 ); + for ( i = 0; i < N; i++ ) { + for ( j = 0; j < N; j++ ) { + if ( i === j ) { + original[ (i*N)+j ] = N + 2.0; + } else if ( ( uplo === 'upper' && i < j ) || ( uplo === 'lower' && i > j ) ) { + original[ (i*N)+j ] = 0.25; + } else { + original[ (i*N)+j ] = 999.0; + } + } + } + return benchmark; + + /** + * Benchmark function. + * + * @private + * @param {Benchmark} b - benchmark instance + */ + function benchmark( b ) { + var expected; + var start; + var info; + var stop; + var i; + + expected = ( N <= NB ) ? N : NB-1; + info = 0; + b.tic(); + for ( i = 0; i < b.iterations; i++ ) { + // Include resetting the changed input in each iteration: + A.set( original ); + info = dlasyf( uplo, N, NB, KB, 0, A, N, 1, 0, IPIV, 1, 0, W, NB, 1, 0 ); // eslint-disable-line max-len + if ( info !== 0 || KB[ 0 ] !== expected ) { + b.fail( 'should factor the expected nonsingular panel' ); + break; + } + } + b.toc(); + start = ( uplo === 'upper' ) ? N-expected : 0; + stop = start + expected; + for ( i = start; i < stop; i++ ) { + if ( IPIV[ i ] !== i+1 ) { + b.fail( 'should produce the expected identity pivot targets' ); + break; + } + } + if ( ( uplo === 'upper' && A[ N ] !== 999.0 ) || ( uplo === 'lower' && A[ 1 ] !== 999.0 ) ) { + b.fail( 'should preserve the ignored triangle' ); + } + b.pass( 'benchmark finished' ); + b.end(); + } +} + + +// MAIN // + +/** +* Main execution sequence. +* +* @private +*/ +function main() { + var options; + var sizes; + var uplos; + var width; + var name; + var fcn; + var i; + var j; + var k; + + options = { + 'iterations': 200, + 'repeats': 2 + }; + sizes = [ 8, 16 ]; + uplos = [ 'upper', 'lower' ]; + for ( i = 0; i < sizes.length; i++ ) { + for ( j = 0; j < uplos.length; j++ ) { + for ( k = 0; k < 2; k++ ) { + width = ( k === 1 ) ? sizes[ i ] : 4; + name = format( '%s:ndarray:triangle=%s:N=%d:NB=%d', pkg, uplos[ j ], sizes[ i ], width ); + fcn = createBenchmark( sizes[ i ], width, uplos[ j ] ); + bench( name, options, fcn ); + } + } + } +} + +main(); diff --git a/lib/node_modules/@stdlib/lapack/base/dlasyf/benchmark/c/Makefile b/lib/node_modules/@stdlib/lapack/base/dlasyf/benchmark/c/Makefile new file mode 100644 index 000000000000..979768abbcec --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dlasyf/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/dlasyf/benchmark/c/benchmark.c b/lib/node_modules/@stdlib/lapack/base/dlasyf/benchmark/c/benchmark.c new file mode 100644 index 000000000000..d324aaf08aa5 --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dlasyf/benchmark/c/benchmark.c @@ -0,0 +1,180 @@ +/** +* @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/dlasyf.h" +#include "stdlib/lapack/base/shared.h" +#include +#include +#include +#include + +#define ITERATIONS 200 +#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; +} + +/** +* Resets and factors a bounded panel, then validates its outputs. +* +* @param N matrix order +* @param NB panel width +* @param uplo stored triangle +* @param ndarray whether to use explicit indexing +* @return elapsed seconds or -1 on failure +*/ +static double benchmark( const LAPACK_INT N, const LAPACK_INT NB, const LAPACK_UPLO uplo, const int ndarray ) { + double *original; + double *A; + double *W; + LAPACK_INT *IPIV; + LAPACK_INT KB; + LAPACK_INT expected; + LAPACK_INT start; + LAPACK_INT stop; + LAPACK_INT info; + LAPACK_INT i; + LAPACK_INT j; + double elapsed; + double t; + int k; + + original = (double *)malloc( (size_t)(N*N) * sizeof( double ) ); + A = (double *)malloc( (size_t)(N*N) * sizeof( double ) ); + W = (double *)malloc( (size_t)(N*NB) * sizeof( double ) ); + IPIV = (LAPACK_INT *)malloc( (size_t)N * sizeof( LAPACK_INT ) ); + if ( original == NULL || A == NULL || W == NULL || IPIV == NULL ) { + fprintf( stderr, "Error allocating benchmark buffers.\n" ); + free( original ); + free( A ); + free( W ); + free( IPIV ); + return -1.0; + } + for ( i = 0; i < N; i++ ) { + IPIV[ i ] = -99; + for ( j = 0; j < N; j++ ) { + if ( i == j ) { + original[ (i*N)+j ] = (double)N + 2.0; + } else if ( ( uplo == LAPACK_UPPER_TRIANGLE && i < j ) || ( uplo == LAPACK_LOWER_TRIANGLE && i > j ) ) { + original[ (i*N)+j ] = 0.25; + } else { + original[ (i*N)+j ] = 999.0; + } + } + } + for ( i = 0; i < N*NB; i++ ) { + W[ i ] = -9.0; + } + expected = ( N <= NB ) ? N : NB-1; + KB = 0; + info = 0; + t = tic(); + for ( k = 0; k < ITERATIONS; k++ ) { + // Include input reset: factoring the previous factors would be a different workload. + memcpy( A, original, (size_t)(N*N) * sizeof( double ) ); + if ( ndarray ) { + info = API_SUFFIX(c_dlasyf_ndarray)( uplo, N, NB, &KB, 0, A, N, 1, 0, IPIV, 1, 0, W, NB, 1, 0 ); + } else { + info = API_SUFFIX(c_dlasyf)( LAPACK_ROW_MAJOR, uplo, N, NB, &KB, A, N, IPIV, W, NB ); + } + if ( info != 0 || KB != expected ) { + break; + } + } + elapsed = tic() - t; + if ( info != 0 || KB != expected ) { + elapsed = -1.0; + } + start = ( uplo == LAPACK_UPPER_TRIANGLE ) ? N-expected : 0; + stop = start + expected; + for ( i = start; i < stop; i++ ) { + if ( IPIV[ i ] != i+1 ) { + elapsed = -1.0; + } + } + if ( ( uplo == LAPACK_UPPER_TRIANGLE && A[ N ] != 999.0 ) || ( uplo == LAPACK_LOWER_TRIANGLE && A[ 1 ] != 999.0 ) ) { + elapsed = -1.0; + } + free( original ); + free( A ); + free( W ); + free( IPIV ); + return elapsed; +} + +/** +* Main execution sequence. +*/ +int main( void ) { + const LAPACK_INT sizes[] = { 8, 16 }; + const LAPACK_UPLO uplos[] = { LAPACK_UPPER_TRIANGLE, LAPACK_LOWER_TRIANGLE }; + LAPACK_INT width; + double elapsed; + int count; + int passing; + int i; + int j; + int k; + int panel; + 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 ( panel = 0; panel < 2; panel++ ) { + width = panel ? sizes[ i ] : 4; + for ( r = 0; r < REPEATS; r++ ) { + count += 1; + printf( "# c::dlasyf:N=%d:NB=%d:uplo=%s:ndarray=%d\n", (int)sizes[ i ], (int)width, j ? "lower" : "upper", k ); + elapsed = benchmark( sizes[ i ], width, 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/dlasyf/binding.gyp b/lib/node_modules/@stdlib/lapack/base/dlasyf/binding.gyp new file mode 100644 index 000000000000..864d9109e892 --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dlasyf/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/dlasyf/docs/repl.txt b/lib/node_modules/@stdlib/lapack/base/dlasyf/docs/repl.txt new file mode 100644 index 000000000000..abd16d76a98f --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dlasyf/docs/repl.txt @@ -0,0 +1,171 @@ +{{alias}}( order, uplo, N, NB, KB, A, LDA, IPIV, W, LDW ) + Computes a partial symmetric indefinite Bunch-Kaufman factorization. + + Returns numeric INFO and writes a separate column count to KB[0]. A + positive INFO marks the first encountered exactly-zero D diagonal, + using its global 1-based index. The singular panel still completes. + + KB=N if N<=NB, and KB=NB or NB-1 otherwise. Upper storage writes only + the last KB pivot positions; lower storage only the first KB. Other + pivot positions remain unchanged. Incoming pivots are not input. + Produced ordinary pivots are signed and 1-based; equal adjacent + negative values identify a 2x2 block. They are not rook pivots. + + Only the selected triangle of A is read or modified. The other triangle, + padding and guards are preserved. W is output scratch. Prior contents + do not affect defined results; unwritten cells remain unchanged and + unspecified as numerical outputs. Finite stored-triangle inputs define + the reference-comparison domain; active nonfinite inputs have no + universal factorization guarantee. + + For N>0, full A/W views must be injective and in bounds. All four active + indexed-byte envelopes must be pairwise disjoint, even if interleaved + slots differ. Disjoint views of one ordinary ArrayBuffer are allowed. + Active typed arrays require intrinsic ordinary ArrayBuffer backing. + SharedArrayBuffer-backed views, including shared storage returned by + structuredClone, are rejected before routine-owned writes. Shadowed + buffer properties do not change this rule. Foreign-addon externally + aliased ordinary buffers are outside the caller contract. + + For N=0, scalar checks and active KB checks still run. The routine + writes KB[0]=0 and returns 0 without accessing A, IPIV or W. Inactive + storage aliased to KB can observe its backing-byte change. This safe + empty behavior is package-defined, not original-reference parity. + Invalid selectors/types throw TypeError; invalid dimensions, active + metadata, bounds, collisions or aliases throw RangeError before writes. + + Parameters + ---------- + order: string|number + Storage layout: 'row-major' (101) or 'column-major' (102). + + uplo: string|number + Stored triangle: 'upper' (121) or 'lower' (122). + + N: integer + Nonnegative safe integer matrix order, at most 2147483647. + + NB: integer + Safe integer panel width from 2 to 2147483647; may exceed N. + + KB: Int32Array + One active output scalar at index zero. + + A: Float64Array + Input/output N-by-N matrix view. + + LDA: integer + Matrix leading dimension, at least max(1,N), even for N=0. + + IPIV: Int32Array + N pivot output slots; only the factored prefix/suffix is written. + + W: Float64Array + Mutable N-by-NB output scratch view. + + LDW: integer + At least max(1,N) column-major or NB row-major, even for N=0. + + Returns + ------- + info: number + Zero normally or a positive singular diagonal index. + + Examples + -------- + > var A = new {{alias:@stdlib/array/float64}}( [ 0, 4, 999, 0 ] ); + > var W = new {{alias:@stdlib/array/float64}}( 4 ); + > var P = new {{alias:@stdlib/array/int32}}( 2 ); + > var KB = new {{alias:@stdlib/array/int32}}( 1 ); + > {{alias}}( 'row-major', 'upper', 2, 2, KB, A, 2, P, W, 2 ) + 0 + > KB + [ 2 ] + > P + [ -1, -1 ] + + +{{alias}}.ndarray(uplo,N,NB,KB,ok,A,sa1,sa2,oa,IPIV,sp,op,W,sw1,sw2,ow) + Computes a partial factorization with alternative indexing semantics. + + Strides and offsets are in elements relative to each typed-array view. + Positive and negative independent strides are supported. Matrix A has + shape N-by-N; W has shape N-by-NB. Both full views must be injective. + Mutable zero strides are invalid for axes of extent greater than one. + All active metadata and index arithmetic must use exact safe integers. + + The same pivot, scratch, backing and envelope rules apply. For N=0, + after validating uplo, N, NB and active KB/ok, write KB[ok]=0 and return + 0. No A/IPIV/W or unused stride/offset argument is accessed. Only KB + remains active; inactive aliases can observe that scalar write. + + Parameters + ---------- + uplo: string|number + Stored triangle: 'upper' (121) or 'lower' (122). + + N: integer + Nonnegative safe integer matrix order, at most 2147483647. + + NB: integer + Safe integer panel width from 2 to 2147483647. + + KB: Int32Array + Array containing the one active output count scalar. + + ok: integer + Index of the output scalar in KB. + + A: Float64Array + Input/output N-by-N matrix. + + sa1: integer + Matrix row stride. + + sa2: integer + Matrix column stride. + + oa: integer + Starting index for A. + + IPIV: Int32Array + Signed 1-based ordinary pivot outputs. + + sp: integer + Pivot stride. + + op: integer + Starting pivot index. + + W: Float64Array + Mutable N-by-NB output scratch. + + sw1: integer + Scratch row stride. + + sw2: integer + Scratch column stride. + + ow: integer + Starting scratch index. + + Returns + ------- + info: number + Zero normally or a positive singular diagonal index. + + Examples + -------- + > var A = new {{alias:@stdlib/array/float64}}( [ 9, 0, 9 ] ); + > var W = new {{alias:@stdlib/array/float64}}( 4 ); + > var P = new {{alias:@stdlib/array/int32}}( [ 8, 0, 8 ] ); + > var KB = new {{alias:@stdlib/array/int32}}( [ 7, 9, 7 ] ); + > {{alias}}.ndarray('upper',1,2,KB,1,A,1,1,1,P,1,1,W,2,1,1) + 1 + > KB + [ 7, 1, 7 ] + > P + [ 8, 1, 8 ] + + See Also + -------- diff --git a/lib/node_modules/@stdlib/lapack/base/dlasyf/docs/types/index.d.ts b/lib/node_modules/@stdlib/lapack/base/dlasyf/docs/types/index.d.ts new file mode 100644 index 000000000000..f91e2dbabe9d --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dlasyf/docs/types/index.d.ts @@ -0,0 +1,166 @@ +/* +* @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'; + +/** +* Interface describing `dlasyf`. +*/ +interface Routine { + /** + * Computes a partial symmetric indefinite factorization in place. + * + * ## Notes + * + * - INFO is numeric and independent of the one-element KB output. + * - A positive INFO marks the first encountered exactly-zero D diagonal; the panel still completes. + * - Equal adjacent negative signed 1-based pivots describe ordinary 2x2 blocks. + * - Only the upper final KB or lower first KB pivot slots are written; other slots are preserved. + * - The full A/W views must be injective and in bounds; all four indexed-byte envelopes must be disjoint. + * - Every active actual buffer must have intrinsic ordinary ArrayBuffer backing; SharedArrayBuffer views are rejected before routine-owned writes. + * - Foreign-addon externally aliased ordinary ArrayBuffers are outside the caller contract. + * - The declared typed-array types cannot encode this runtime backing-store precondition. + * - For N=0, after scalar and active KB validation, only KB is written to zero; inactive buffers and unused ndarray metadata are not accessed. + * - Inactive buffers aliased to KB can observe its backing-byte change; this new empty behavior is not reference parity. + * - Finite stored-triangle inputs define the reference-comparison domain; active nonfinite behavior has no universal guarantee. + * + * @param order - row-major (101) or column-major (102) layout + * @param uplo - upper (121) or lower (122) stored triangle + * @param N - matrix order, a nonnegative safe integer at most 2147483647 + * @param NB - panel width, a safe integer from 2 to 2147483647 + * @param KB - mutable Int32 output count scalar + * @param A - input/output square matrix + * @param LDA - leading dimension of A, at least max(1,N) + * @param IPIV - signed 1-based ordinary Bunch-Kaufman pivot outputs + * @param W - mutable N-by-NB output scratch + * @param LDW - scratch leading dimension, at least N (or 1) column-major and NB row-major + * @throws selectors and active array types/backing stores must be valid + * @throws dimensions, active metadata, bounds, collisions and aliases must satisfy the preconditions + * @returns zero or a positive singular diagonal index + * + * @example + * var Float64Array = require( '@stdlib/array/float64' ); + * var Int32Array = require( '@stdlib/array/int32' ); + * + * var A = new Float64Array( [ 0.0, 4.0, 999.0, 0.0 ] ); + * var W = new Float64Array( 4 ); + * var P = new Int32Array( 2 ); + * var KB = new Int32Array( 1 ); + * + * var info = dlasyf( 'row-major', 'upper', 2, 2, KB, A, 2, P, W, 2 ); + * // returns 0 + * // KB => [ 2 ] + * // P => [ -1, -1 ] + */ + ( order: Layout | 101 | 102, uplo: MatrixTriangle | 121 | 122, N: number, NB: number, KB: Int32Array, A: Float64Array, LDA: number, IPIV: Int32Array, W: Float64Array, LDW: number ): number; + + /** + * Computes a partial symmetric factorization with alternative indexing semantics. + * + * ## Notes + * + * - INFO is numeric and independent of the one-element KB output. + * - A positive INFO marks the first encountered exactly-zero D diagonal; the panel still completes. + * - Equal adjacent negative signed 1-based pivots describe ordinary 2x2 blocks. + * - Only the upper final KB or lower first KB pivot slots are written; other slots are preserved. + * - The full A/W views must be injective and in bounds; all four indexed-byte envelopes must be disjoint. + * - Every active actual buffer must have intrinsic ordinary ArrayBuffer backing; SharedArrayBuffer views are rejected before routine-owned writes. + * - Foreign-addon externally aliased ordinary ArrayBuffers are outside the caller contract. + * - The declared typed-array types cannot encode this runtime backing-store precondition. + * - For N=0, after scalar and active KB validation, only KB is written to zero; inactive buffers and unused ndarray metadata are not accessed. + * - Inactive buffers aliased to KB can observe its backing-byte change; this new empty behavior is not reference parity. + * - Finite stored-triangle inputs define the reference-comparison domain; active nonfinite behavior has no universal guarantee. + * + * - Strides and offsets are element indices relative to their actual typed-array views. + * - Positive and negative independent strides are supported; mutable zero strides are rejected for axes of extent greater than one. + * + * @param uplo - upper (121) or lower (122) stored triangle + * @param N - matrix order, a nonnegative safe integer at most 2147483647 + * @param NB - panel width, a safe integer from 2 to 2147483647 + * @param KB - mutable Int32 output count scalar + * @param offsetKB - index of the one active output scalar + * @param A - input/output square matrix + * @param strideA1 - matrix row stride + * @param strideA2 - matrix column stride + * @param offsetA - starting matrix index + * @param IPIV - signed 1-based ordinary Bunch-Kaufman pivot outputs + * @param strideIPIV - pivot stride + * @param offsetIPIV - starting pivot index + * @param W - mutable N-by-NB output scratch + * @param strideW1 - scratch row stride + * @param strideW2 - scratch column stride + * @param offsetW - starting scratch index + * @throws selectors and active array types/backing stores must be valid + * @throws dimensions, active metadata, bounds, collisions and aliases must satisfy the preconditions + * @returns zero or a positive singular diagonal index + * + * @example + * var Float64Array = require( '@stdlib/array/float64' ); + * var Int32Array = require( '@stdlib/array/int32' ); + * + * var A = new Float64Array( [ 9.0, 0.0, 9.0 ] ); + * var W = new Float64Array( 4 ); + * var P = new Int32Array( [ 8, 0, 8 ] ); + * var KB = new Int32Array( [ 7, 9, 7 ] ); + * + * var info = dlasyf.ndarray( 'upper', 1, 2, KB, 1, A, 1, 1, 1, P, 1, 1, W, 2, 1, 1 ); + * // returns 1 + * // KB => [ 7, 1, 7 ] + * // P => [ 8, 1, 8 ] + */ + ndarray( uplo: MatrixTriangle | 121 | 122, N: number, NB: number, KB: Int32Array, offsetKB: number, A: Float64Array, strideA1: number, strideA2: number, offsetA: number, IPIV: Int32Array, strideIPIV: number, offsetIPIV: number, W: Float64Array, strideW1: number, strideW2: number, offsetW: number ): number; +} + +/** +* Computes a partial symmetric indefinite factorization. +* +* @param order - row-major (101) or column-major (102) layout +* @param uplo - upper (121) or lower (122) stored triangle +* @param N - matrix order, a nonnegative safe integer at most 2147483647 +* @param NB - panel width, a safe integer from 2 to 2147483647 +* @param KB - mutable Int32 output count scalar +* @param A - input/output square matrix +* @param LDA - leading dimension of A, at least max(1,N) +* @param IPIV - signed 1-based ordinary Bunch-Kaufman pivot outputs +* @param W - mutable N-by-NB output scratch +* @param LDW - scratch leading dimension, at least N (or 1) column-major and NB row-major +* @returns numeric INFO, independent of the mutable KB count +* +* @example +* var Float64Array = require( '@stdlib/array/float64' ); +* var Int32Array = require( '@stdlib/array/int32' ); +* +* var A = new Float64Array( [ 0.0 ] ); +* var W = new Float64Array( 2 ); +* var P = new Int32Array( 1 ); +* var KB = new Int32Array( 1 ); +* +* var info = dlasyf( 'column-major', 'lower', 1, 2, KB, A, 1, P, W, 1 ); +* // returns 1 +* // KB => [ 1 ] +*/ +declare var dlasyf: Routine; + + +// EXPORTS // + +export = dlasyf; diff --git a/lib/node_modules/@stdlib/lapack/base/dlasyf/docs/types/test.ts b/lib/node_modules/@stdlib/lapack/base/dlasyf/docs/types/test.ts new file mode 100644 index 000000000000..488c8608c226 --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dlasyf/docs/types/test.ts @@ -0,0 +1,106 @@ +/* +* @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 dlasyf = require( './index' ); + + +// TESTS // + +const A = new Float64Array( 4 ); +const W = new Float64Array( 4 ); +const P = new Int32Array( 2 ); +const KB = new Int32Array( 1 ); + +// The status is numeric; the factor count is a separate mutable Int32 output: +dlasyf( 'row-major', 'upper', 2, 2, KB, A, 2, P, W, 2 ); // $ExpectType number +dlasyf( 'column-major', 'lower', 2, 2, KB, A, 2, P, W, 2 ); // $ExpectType number +dlasyf( 101, 121, 2, 2, KB, A, 2, P, W, 2 ); // $ExpectType number +dlasyf( 102, 122, 2, 2, KB, A, 2, P, W, 2 ); // $ExpectType number +dlasyf.ndarray( 'upper', 2, 2, KB, 0, A, 2, 1, 0, P, 1, 0, W, 2, 1, 0 ); // $ExpectType number +dlasyf.ndarray( 122, 2, 2, KB, 0, A, -2, -1, 3, P, -1, 1, W, -2, -1, 3 ); // $ExpectType number + +// Incorrect enum values and buffer roles remain type errors: +dlasyf( 103, 'upper', 2, 2, KB, A, 2, P, W, 2 ); // $ExpectError +dlasyf( 'row-major', 123, 2, 2, KB, A, 2, P, W, 2 ); // $ExpectError +dlasyf( 'F', 'upper', 2, 2, KB, A, 2, P, W, 2 ); // $ExpectError +dlasyf.ndarray( 'all', 2, 2, KB, 0, A, 2, 1, 0, P, 1, 0, W, 2, 1, 0 ); // $ExpectError +dlasyf( 'row-major', 'upper', 2, 2, W, A, 2, P, W, 2 ); // $ExpectError +dlasyf( 'row-major', 'upper', 2, 2, KB, A, 2, W, W, 2 ); // $ExpectError +dlasyf.ndarray( 'upper', 2, 2, W, 0, A, 2, 1, 0, P, 1, 0, W, 2, 1, 0 ); // $ExpectError + +// Every required dlasyf argument has its declared role/type: +dlasyf( false, 'upper', 2, 2, KB, A, 2, P, W, 2 ); // $ExpectError +dlasyf( 'row-major', false, 2, 2, KB, A, 2, P, W, 2 ); // $ExpectError +dlasyf( 'row-major', 'upper', false, 2, KB, A, 2, P, W, 2 ); // $ExpectError +dlasyf( 'row-major', 'upper', 2, false, KB, A, 2, P, W, 2 ); // $ExpectError +dlasyf( 'row-major', 'upper', 2, 2, [], A, 2, P, W, 2 ); // $ExpectError +dlasyf( 'row-major', 'upper', 2, 2, KB, [], 2, P, W, 2 ); // $ExpectError +dlasyf( 'row-major', 'upper', 2, 2, KB, A, false, P, W, 2 ); // $ExpectError +dlasyf( 'row-major', 'upper', 2, 2, KB, A, 2, [], W, 2 ); // $ExpectError +dlasyf( 'row-major', 'upper', 2, 2, KB, A, 2, P, [], 2 ); // $ExpectError +dlasyf( 'row-major', 'upper', 2, 2, KB, A, 2, P, W, false ); // $ExpectError + +// Missing and extra arguments are rejected: +dlasyf(); // $ExpectError +dlasyf( 'row-major' ); // $ExpectError +dlasyf( 'row-major', 'upper' ); // $ExpectError +dlasyf( 'row-major', 'upper', 2 ); // $ExpectError +dlasyf( 'row-major', 'upper', 2, 2 ); // $ExpectError +dlasyf( 'row-major', 'upper', 2, 2, KB ); // $ExpectError +dlasyf( 'row-major', 'upper', 2, 2, KB, A ); // $ExpectError +dlasyf( 'row-major', 'upper', 2, 2, KB, A, 2 ); // $ExpectError +dlasyf( 'row-major', 'upper', 2, 2, KB, A, 2, P ); // $ExpectError +dlasyf( 'row-major', 'upper', 2, 2, KB, A, 2, P, W ); // $ExpectError +dlasyf( 'row-major', 'upper', 2, 2, KB, A, 2, P, W, 2, 0 ); // $ExpectError + +// Every required dlasyf.ndarray argument has its declared role/type: +dlasyf.ndarray( false, 2, 2, KB, 0, A, 2, 1, 0, P, 1, 0, W, 2, 1, 0 ); // $ExpectError +dlasyf.ndarray( 'upper', false, 2, KB, 0, A, 2, 1, 0, P, 1, 0, W, 2, 1, 0 ); // $ExpectError +dlasyf.ndarray( 'upper', 2, false, KB, 0, A, 2, 1, 0, P, 1, 0, W, 2, 1, 0 ); // $ExpectError +dlasyf.ndarray( 'upper', 2, 2, [], 0, A, 2, 1, 0, P, 1, 0, W, 2, 1, 0 ); // $ExpectError +dlasyf.ndarray( 'upper', 2, 2, KB, false, A, 2, 1, 0, P, 1, 0, W, 2, 1, 0 ); // $ExpectError +dlasyf.ndarray( 'upper', 2, 2, KB, 0, [], 2, 1, 0, P, 1, 0, W, 2, 1, 0 ); // $ExpectError +dlasyf.ndarray( 'upper', 2, 2, KB, 0, A, false, 1, 0, P, 1, 0, W, 2, 1, 0 ); // $ExpectError +dlasyf.ndarray( 'upper', 2, 2, KB, 0, A, 2, false, 0, P, 1, 0, W, 2, 1, 0 ); // $ExpectError +dlasyf.ndarray( 'upper', 2, 2, KB, 0, A, 2, 1, false, P, 1, 0, W, 2, 1, 0 ); // $ExpectError +dlasyf.ndarray( 'upper', 2, 2, KB, 0, A, 2, 1, 0, [], 1, 0, W, 2, 1, 0 ); // $ExpectError +dlasyf.ndarray( 'upper', 2, 2, KB, 0, A, 2, 1, 0, P, false, 0, W, 2, 1, 0 ); // $ExpectError +dlasyf.ndarray( 'upper', 2, 2, KB, 0, A, 2, 1, 0, P, 1, false, W, 2, 1, 0 ); // $ExpectError +dlasyf.ndarray( 'upper', 2, 2, KB, 0, A, 2, 1, 0, P, 1, 0, [], 2, 1, 0 ); // $ExpectError +dlasyf.ndarray( 'upper', 2, 2, KB, 0, A, 2, 1, 0, P, 1, 0, W, false, 1, 0 ); // $ExpectError +dlasyf.ndarray( 'upper', 2, 2, KB, 0, A, 2, 1, 0, P, 1, 0, W, 2, false, 0 ); // $ExpectError +dlasyf.ndarray( 'upper', 2, 2, KB, 0, A, 2, 1, 0, P, 1, 0, W, 2, 1, false ); // $ExpectError + +// Missing and extra arguments are rejected: +dlasyf.ndarray(); // $ExpectError +dlasyf.ndarray( 'upper' ); // $ExpectError +dlasyf.ndarray( 'upper', 2 ); // $ExpectError +dlasyf.ndarray( 'upper', 2, 2 ); // $ExpectError +dlasyf.ndarray( 'upper', 2, 2, KB ); // $ExpectError +dlasyf.ndarray( 'upper', 2, 2, KB, 0 ); // $ExpectError +dlasyf.ndarray( 'upper', 2, 2, KB, 0, A ); // $ExpectError +dlasyf.ndarray( 'upper', 2, 2, KB, 0, A, 2 ); // $ExpectError +dlasyf.ndarray( 'upper', 2, 2, KB, 0, A, 2, 1 ); // $ExpectError +dlasyf.ndarray( 'upper', 2, 2, KB, 0, A, 2, 1, 0 ); // $ExpectError +dlasyf.ndarray( 'upper', 2, 2, KB, 0, A, 2, 1, 0, P ); // $ExpectError +dlasyf.ndarray( 'upper', 2, 2, KB, 0, A, 2, 1, 0, P, 1 ); // $ExpectError +dlasyf.ndarray( 'upper', 2, 2, KB, 0, A, 2, 1, 0, P, 1, 0 ); // $ExpectError +dlasyf.ndarray( 'upper', 2, 2, KB, 0, A, 2, 1, 0, P, 1, 0, W ); // $ExpectError +dlasyf.ndarray( 'upper', 2, 2, KB, 0, A, 2, 1, 0, P, 1, 0, W, 2 ); // $ExpectError +dlasyf.ndarray( 'upper', 2, 2, KB, 0, A, 2, 1, 0, P, 1, 0, W, 2, 1 ); // $ExpectError +dlasyf.ndarray( 'upper', 2, 2, KB, 0, A, 2, 1, 0, P, 1, 0, W, 2, 1, 0, 0 ); // $ExpectError diff --git a/lib/node_modules/@stdlib/lapack/base/dlasyf/examples/c/Makefile b/lib/node_modules/@stdlib/lapack/base/dlasyf/examples/c/Makefile new file mode 100644 index 000000000000..c8f8e9a1517b --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dlasyf/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/dlasyf/examples/c/example.c b/lib/node_modules/@stdlib/lapack/base/dlasyf/examples/c/example.c new file mode 100644 index 000000000000..8929e6ec4216 --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dlasyf/examples/c/example.c @@ -0,0 +1,95 @@ +/** +* @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/dlasyf.h" +#include "stdlib/lapack/base/shared.h" +#include +#include + +/** +* Main execution sequence. +*/ +int main( void ) { + const double diagonal[] = { 4.0, -3.0, 2.0, -1.0, 0.0, 6.0 }; + double *A; + double *W; + LAPACK_INT *IPIV; + LAPACK_INT *KB; + LAPACK_INT info; + LAPACK_INT i; + LAPACK_INT j; + int result; + + A = (double *)malloc( 36 * sizeof( double ) ); + W = (double *)malloc( 18 * sizeof( double ) ); + IPIV = (LAPACK_INT *)malloc( 6 * sizeof( LAPACK_INT ) ); + KB = (LAPACK_INT *)malloc( sizeof( LAPACK_INT ) ); + result = EXIT_FAILURE; + if ( A == NULL || W == NULL || IPIV == NULL || KB == NULL ) { + fprintf( stderr, "Error allocating example buffers.\n" ); + goto cleanup; + } + for ( i = 0; i < 6; i++ ) { + IPIV[ i ] = -99; + for ( j = 0; j < 6; j++ ) { + A[ (i*6)+j ] = ( i == j ) ? diagonal[ i ] : ( i > j ) ? 999.0 : 0.0; + } + } + for ( i = 0; i < 18; i++ ) { + W[ i ] = -9.0; + } + KB[ 0 ] = -9; + info = API_SUFFIX(c_dlasyf)( LAPACK_ROW_MAJOR, LAPACK_UPPER_TRIANGLE, 6, 3, KB, A, 6, IPIV, W, 3 ); + if ( info != 5 || KB[ 0 ] != 2 || IPIV[ 4 ] != 5 || IPIV[ 5 ] != 6 ) { + fprintf( stderr, "Unexpected partial factorization result.\n" ); + goto cleanup; + } + for ( i = 0; i < 4; i++ ) { + if ( IPIV[ i ] != -99 ) { + goto cleanup; + } + } + for ( i = 0; i < 6; i++ ) { + for ( j = 0; j < i; j++ ) { + if ( A[ (i*6)+j ] != 999.0 ) { + goto cleanup; + } + } + } + printf( "INFO: %d; KB: %d; produced pivots: %d, %d\n", (int)info, (int)KB[ 0 ], (int)IPIV[ 4 ], (int)IPIV[ 5 ] ); + + // Reuse the allocations with disjoint leading views for a lower 2x2 block: + A[ 0 ] = 0.0; + A[ 1 ] = 999.0; + A[ 2 ] = 4.0; + A[ 3 ] = 0.0; + info = API_SUFFIX(c_dlasyf_ndarray)( LAPACK_LOWER_TRIANGLE, 2, 2, KB, 0, A, 2, 1, 0, IPIV, 1, 0, W, 2, 1, 0 ); + if ( info != 0 || KB[ 0 ] != 2 || IPIV[ 0 ] != -2 || IPIV[ 1 ] != -2 || A[ 1 ] != 999.0 ) { + fprintf( stderr, "Unexpected ordinary 2x2 pivot result.\n" ); + goto cleanup; + } + printf( "Ordinary 2x2 pivots: %d, %d\n", (int)IPIV[ 0 ], (int)IPIV[ 1 ] ); + result = EXIT_SUCCESS; + +cleanup: + free( A ); + free( W ); + free( IPIV ); + free( KB ); + return result; +} diff --git a/lib/node_modules/@stdlib/lapack/base/dlasyf/examples/index.js b/lib/node_modules/@stdlib/lapack/base/dlasyf/examples/index.js new file mode 100644 index 000000000000..0f725c995305 --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dlasyf/examples/index.js @@ -0,0 +1,84 @@ +/** +* @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 Int32Array = require( '@stdlib/array/int32' ); +var dlasyf = require( './../lib' ); + + +// MAIN // + +var diagonal = [ 4.0, -3.0, 2.0, -1.0, 0.0, 6.0 ]; +var A = new Float64Array( 36 ); +var W = new Float64Array( 18 ); +var IPIV = new Int32Array( [ -99, -99, -99, -99, -99, -99 ] ); +var KB = new Int32Array( 1 ); +var info; +var i; +var j; + +// Only the upper triangle is input; 999 guards the ignored lower triangle: +for ( i = 0; i < 6; i++ ) { + for ( j = 0; j < 6; j++ ) { + if ( i === j ) { + A[ (i*6)+j ] = diagonal[ i ]; + } else if ( i > j ) { + A[ (i*6)+j ] = 999.0; + } + } +} + +// A singular partial panel still produces a valid factor count and pivots: +info = dlasyf( 'row-major', 'upper', 6, 3, KB, A, 6, IPIV, W, 3 ); +if ( info !== 5 || KB[ 0 ] !== 2 || IPIV[ 4 ] !== 5 || IPIV[ 5 ] !== 6 ) { + throw new Error( 'Unexpected partial factorization result.' ); +} +for ( i = 0; i < 4; i++ ) { + if ( IPIV[ i ] !== -99 ) { + throw new Error( 'Unfactored pivots changed.' ); + } +} +for ( i = 0; i < 6; i++ ) { + for ( j = 0; j < i; j++ ) { + if ( A[ (i*6)+j ] !== 999.0 ) { + throw new Error( 'Ignored triangle changed.' ); + } + } +} +console.log( 'INFO: %d; KB: %d', info, KB[ 0 ] ); +console.log( 'Pivots: %s', IPIV.join( ', ' ) ); + +// A lower 2x2 diagonal block has equal negative ordinary LAPACK pivots: +A = new Float64Array( [ 0.0, 999.0, 4.0, 0.0 ] ); +W = new Float64Array( 4 ); +IPIV = new Int32Array( 2 ); +info = dlasyf.ndarray( 'lower', 2, 2, KB, 0, A, 2, 1, 0, IPIV, 1, 0, W, 2, 1, 0 ); +if ( + info !== 0 || + KB[ 0 ] !== 2 || + IPIV[ 0 ] !== -2 || + IPIV[ 1 ] !== -2 || + A[ 1 ] !== 999.0 +) { + throw new Error( 'Unexpected 2x2 block result.' ); +} +console.log( '2x2 pivots: %s', IPIV.join( ', ' ) ); diff --git a/lib/node_modules/@stdlib/lapack/base/dlasyf/include.gypi b/lib/node_modules/@stdlib/lapack/base/dlasyf/include.gypi new file mode 100644 index 000000000000..dcb556d250e8 --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dlasyf/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)', + '= max(1,N); LDW >= max(1,N) column-major or NB row-major. +* After scalar and KB validation, N=0 writes only KB[0]=0 and returns zero. +* This safe-empty behavior is a package contract rather than reference parity. +* All active views and conservative physical byte envelopes are validated +* before writes; sufficiently allocated, mutually disjoint storage is required. +*/ +LAPACK_INT API_SUFFIX(c_dlasyf)( const LAPACK_LAYOUT layout, const LAPACK_UPLO uplo, const LAPACK_INT N, const LAPACK_INT NB, LAPACK_INT *KB, double *A, const LAPACK_INT LDA, LAPACK_INT *IPIV, double *W, const LAPACK_INT LDW ); + +/** +* Computes a partial symmetric factorization using alternative indexing. +* +* KB[offsetKB] is the scalar output. A is N-by-N and W is N-by-NB, with +* element index offset+i*stride1+j*stride2. IPIV has N logical elements. +* Active mutable views must be injective, with nonnegative indices, exact +* configured-integer arithmetic and representable physical byte envelopes. +* Used BLAS counts, strides and poststeps must fit configured CBLAS_INT, +* independently of LAPACK_INT; conservative representability checks apply. +* Allocation capacities remain the caller's responsibility. N=0 validates +* only selectors, N, NB and KB geometry, then writes KB[offsetKB]=0. +* +* Finite selected-triangle inputs form the bounded reference-parity domain. +*/ +LAPACK_INT API_SUFFIX(c_dlasyf_ndarray)( const LAPACK_UPLO uplo, const LAPACK_INT N, const LAPACK_INT NB, LAPACK_INT *KB, const LAPACK_INT offsetKB, double *A, const LAPACK_INT strideA1, const LAPACK_INT strideA2, const LAPACK_INT offsetA, LAPACK_INT *IPIV, const LAPACK_INT strideIPIV, const LAPACK_INT offsetIPIV, double *W, const LAPACK_INT strideW1, const LAPACK_INT strideW2, const LAPACK_INT offsetW ); + +#ifdef __cplusplus +} +#endif + +#endif // !STDLIB_LAPACK_BASE_DLASYF_H diff --git a/lib/node_modules/@stdlib/lapack/base/dlasyf/lib/base.js b/lib/node_modules/@stdlib/lapack/base/dlasyf/lib/base.js new file mode 100644 index 000000000000..ec21c9f9d00e --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dlasyf/lib/base.js @@ -0,0 +1,456 @@ +/** +* @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 max = require( '@stdlib/math/base/special/max' ); +var min = require( '@stdlib/math/base/special/min' ); + + +// MODULES // + +// Require the pure implementations; public BLAS exports can load native addons. +var dcopy = require( '@stdlib/blas/base/dcopy/lib/ndarray.js' ); // eslint-disable-line stdlib/no-internal-require +var dscal = require( '@stdlib/blas/base/dscal/lib/ndarray.js' ); // eslint-disable-line stdlib/no-internal-require +var dswap = require( '@stdlib/blas/base/dswap/lib/ndarray.js' ); // eslint-disable-line stdlib/no-internal-require +var abs = require( '@stdlib/math/base/special/abs' ); +var sqrt = require( '@stdlib/math/base/special/sqrt' ); + + +// FUNCTIONS // + +/** +* Copies logical values in bounded blocks, matching both dependency backends. +* @private +* @param {integer} n - count +* @param {Float64Array} x - input +* @param {integer} sx - input stride +* @param {integer} ox - input offset +* @param {Float64Array} y - output +* @param {integer} sy - output stride +* @param {integer} oy - output offset +* @returns {void} +*/ +function copy(n, x, sx, ox, y, sy, oy) { + var m; + var i; + for (i = 0; (i < n); i += m) { + m = min(7, (n - i)); + dcopy(m, x, sx, (ox + (i * sx)), y, sy, (oy + (i * sy))); + } +} +/** +* Finds the first logical maximum without allocating a reversed copy. +* @private +* @param {integer} n - count +* @param {Float64Array} x - vector +* @param {integer} sx - stride +* @param {integer} ox - offset +* @returns {integer} zero-based ordinal +*/ +function firstMax(n, x, sx, ox) { + var maximum; + var index; + var value; + var i; + if ((n < 1)) { + return -1; + } + if ((n === 1)) { + return 0; + } + maximum = abs(x[ox]); + index = 0; + for (i = 1; (i < n); i++) { + value = abs(x[(ox + (i * sx))]); + if ((value > maximum)) { + maximum = value; + index = i; + } + } + return index; +} +/** +* Applies exactly the pinned unconditional NT GEMV accumulation order. +* @private +* @param {integer} m - rows +* @param {integer} n - columns +* @param {Float64Array} a - matrix +* @param {integer} r - row stride +* @param {integer} c - column stride +* @param {integer} o - matrix offset +* @param {Float64Array} x - input vector +* @param {integer} sx - input stride +* @param {integer} ox - input offset +* @param {Float64Array} y - updated vector +* @param {integer} sy - output stride +* @param {integer} oy - output offset +* @returns {void} +*/ +function gemv(m, n, a, r, c, o, x, sx, ox, y, sy, oy) { // eslint-disable-line max-params + var index; + var temp; + var i; + var j; + for (j = 0; (j < n); j++) { + temp = -x[(ox + (j * sx))]; + for (i = 0; (i < m); i++) { + index = (oy + (i * sy)); + y[index] = (y[index] + (temp * a[((o + (i * r)) + (j * c))])); + } + } +} +/** +* Updates only the selected triangle, retaining the reference j/l/i order. +* @private +* @param {integer} u - triangle +* @param {integer} n - block dimension +* @param {integer} k - factor width +* @param {Float64Array} a - factors and updated matrix +* @param {integer} r - row stride +* @param {integer} c - column stride +* @param {integer} of - factor offset +* @param {Float64Array} w - scratch factors +* @param {integer} rw - scratch row stride +* @param {integer} cw - scratch column stride +* @param {integer} ow - scratch offset +* @param {integer} oc - updated block offset +* @returns {void} +*/ +function triangular(u, n, k, a, r, c, of, w, rw, cw, ow, oc) { // eslint-disable-line max-params + var index; + var start; + var temp; + var end; + var i; + var j; + var l; + for (j = 0; (j < n); j++) { + start = ( (u === 121) ) ? 0 : j; + end = ( (u === 121) ) ? (j + 1) : n; + for (l = 0; (l < k); l++) { + temp = -w[((ow + (j * rw)) + (l * cw))]; + for (i = start; (i < end); i++) { + index = ((oc + (i * r)) + (j * c)); + a[index] = (a[index] + (temp * a[((of + (i * r)) + (l * c))])); + } + } + } +} + + +// MAIN // + +/** +* Computes a Bunch-Kaufman panel using the pinned reference loop order. +* @private +* @param {integer} u - stored triangle +* @param {integer} N - order +* @param {integer} NB - panel width +* @param {Int32Array} KB - produced column count output +* @param {integer} okb - count offset +* @param {Float64Array} A - matrix +* @param {integer} ra - row stride +* @param {integer} ca - column stride +* @param {integer} oa - matrix offset +* @param {Int32Array} P - signed one-based pivot output +* @param {integer} sp - pivot stride +* @param {integer} op - pivot offset +* @param {Float64Array} W - scratch +* @param {integer} rw - scratch row stride +* @param {integer} cw - scratch column stride +* @param {integer} ow - scratch offset +* @returns {integer} INFO +*/ +function base(u, N, NB, KB, okb, A, ra, ca, oa, P, sp, op, W, rw, cw, ow) { // eslint-disable-line max-params + var colmax; + var rowmax; + var alpha; + var kstep; + var absk; + var imax; + var jmax; + var info; + var d21; + var d11; + var d22; + var kkw; + var kw; + var kp; + var kk; + var jj; + var jp; + var r1; + var t; + var k; + var j; + info = 0; + alpha = (((1 + sqrt(17))) / 8); + if ((N === 0)) { + KB[okb] = 0; + return 0; + } + if ((u === 121)) { + k = N; + while (true) { + kw = ((NB + k) - N); + if ((((k <= ((N - NB) + 1)) && (NB < N)) || (k < 1))) { + break; + } + copy(k, A, ra, ai(1, k), W, rw, wi(1, kw)); + if ((k < N)) { + gemv(k, (N - k), A, ra, ca, ai(1, (k + 1)), W, cw, wi(k, (kw + 1)), W, rw, wi(1, kw)); + } + kstep = 1; + absk = abs(W[wi(k, kw)]); + colmax = 0; + if ((k > 1)) { + imax = (firstMax((k - 1), W, rw, wi(1, kw)) + 1); + colmax = abs(W[wi(imax, kw)]); + } + if ((max(absk, colmax) === 0)) { + if ((info === 0)) { + info = k; + } + kp = k; + } else { + if ((absk >= (alpha * colmax))) { + kp = k; + } else { + copy(imax, A, ra, ai(1, imax), W, rw, wi(1, (kw - 1))); + copy((k - imax), A, ca, ai(imax, (imax + 1)), W, rw, wi((imax + 1), (kw - 1))); + if ((k < N)) { + gemv(k, (N - k), A, ra, ca, ai(1, (k + 1)), W, cw, wi(imax, (kw + 1)), W, rw, wi(1, (kw - 1))); + } + jmax = ((imax + firstMax((k - imax), W, rw, wi((imax + 1), (kw - 1)))) + 1); + rowmax = abs(W[wi(jmax, (kw - 1))]); + if ((imax > 1)) { + jmax = (firstMax((imax - 1), W, rw, wi(1, (kw - 1))) + 1); + rowmax = max(rowmax, abs(W[wi(jmax, (kw - 1))])); + } + if ((absk >= ((alpha * colmax) * ((colmax / rowmax))))) { + kp = k; + } else if ((abs(W[wi(imax, (kw - 1))]) >= (alpha * rowmax))) { + kp = imax; + copy(k, W, rw, wi(1, (kw - 1)), W, rw, wi(1, kw)); + } else { + kp = imax; + kstep = 2; + } + } + kk = ((k - kstep) + 1); + kkw = ((NB + kk) - N); + if ((kp !== kk)) { + A[ai(kp, kp)] = A[ai(kk, kk)]; + copy(((kk - 1) - kp), A, ra, ai((kp + 1), kk), A, ca, ai(kp, (kp + 1))); + if ((kp > 1)) { + copy((kp - 1), A, ra, ai(1, kk), A, ra, ai(1, kp)); + } + if ((k < N)) { + dswap((N - k), A, ca, ai(kk, (k + 1)), A, ca, ai(kp, (k + 1))); + } + dswap(((N - kk) + 1), W, cw, wi(kk, kkw), W, cw, wi(kp, kkw)); + } + if ((kstep === 1)) { + copy(k, W, rw, wi(1, kw), A, ra, ai(1, k)); + r1 = (1 / A[ai(k, k)]); + if ((k > 1)) { + dscal((k - 1), r1, A, ra, ai(1, k)); + } + } else { + if ((k > 2)) { + d21 = W[wi((k - 1), kw)]; + d11 = (W[wi(k, kw)] / d21); + d22 = (W[wi((k - 1), (kw - 1))] / d21); + t = (1 / (((d11 * d22) - 1))); + d21 = (t / d21); + for (j = 1; (j <= (k - 2)); j++) { + A[ai(j, (k - 1))] = (d21 * (((d11 * W[wi(j, (kw - 1))]) - W[wi(j, kw)]))); + A[ai(j, k)] = (d21 * (((d22 * W[wi(j, kw)]) - W[wi(j, (kw - 1))]))); + } + } + A[ai((k - 1), (k - 1))] = W[wi((k - 1), (kw - 1))]; + A[ai((k - 1), k)] = W[wi((k - 1), kw)]; + A[ai(k, k)] = W[wi(k, kw)]; + } + } + if ((kstep === 1)) { + P[(op + (((k - 1)) * sp))] = kp; + } else { + P[(op + (((k - 1)) * sp))] = -kp; + P[(op + (((k - 2)) * sp))] = -kp; + } + k -= kstep; + } + if (((k > 0) && ((N - k) > 0))) { + triangular(u, k, (N - k), A, ra, ca, ai(1, (k + 1)), W, rw, cw, wi(1, (kw + 1)), ai(1, 1)); + } + j = (k + 1); + while (true) { + jj = j; + jp = P[(op + (((j - 1)) * sp))]; + if ((jp < 0)) { + jp = -jp; + j += 1; + } + j += 1; + if (((jp !== jj) && (j <= N))) { + dswap(((N - j) + 1), A, ca, ai(jp, j), A, ca, ai(jj, j)); + } + if ((j >= N)) { + break; + } + } + KB[okb] = (N - k); + } else { + k = 1; + while (true) { + if ((((k >= NB) && (NB < N)) || (k > N))) { + break; + } + copy(((N - k) + 1), A, ra, ai(k, k), W, rw, wi(k, k)); + if ((k > 1)) { + gemv(((N - k) + 1), (k - 1), A, ra, ca, ai(k, 1), W, cw, wi(k, 1), W, rw, wi(k, k)); + } + kstep = 1; + absk = abs(W[wi(k, k)]); + colmax = 0; + if ((k < N)) { + imax = ((k + firstMax((N - k), W, rw, wi((k + 1), k))) + 1); + colmax = abs(W[wi(imax, k)]); + } + if ((max(absk, colmax) === 0)) { + if ((info === 0)) { + info = k; + } + kp = k; + } else { + if ((absk >= (alpha * colmax))) { + kp = k; + } else { + copy((imax - k), A, ca, ai(imax, k), W, rw, wi(k, (k + 1))); + copy(((N - imax) + 1), A, ra, ai(imax, imax), W, rw, wi(imax, (k + 1))); + if ((k > 1)) { + gemv(((N - k) + 1), (k - 1), A, ra, ca, ai(k, 1), W, cw, wi(imax, 1), W, rw, wi(k, (k + 1))); + } + jmax = (k + firstMax((imax - k), W, rw, wi(k, (k + 1)))); + rowmax = abs(W[wi(jmax, (k + 1))]); + if ((imax < N)) { + jmax = ((imax + firstMax((N - imax), W, rw, wi((imax + 1), (k + 1)))) + 1); + rowmax = max(rowmax, abs(W[wi(jmax, (k + 1))])); + } + if ((absk >= ((alpha * colmax) * ((colmax / rowmax))))) { + kp = k; + } else if ((abs(W[wi(imax, (k + 1))]) >= (alpha * rowmax))) { + kp = imax; + copy(((N - k) + 1), W, rw, wi(k, (k + 1)), W, rw, wi(k, k)); + } else { + kp = imax; + kstep = 2; + } + } + kk = ((k + kstep) - 1); + if ((kp !== kk)) { + A[ai(kp, kp)] = A[ai(kk, kk)]; + copy(((kp - kk) - 1), A, ra, ai((kk + 1), kk), A, ca, ai(kp, (kk + 1))); + if ((kp < N)) { + copy((N - kp), A, ra, ai((kp + 1), kk), A, ra, ai((kp + 1), kp)); + } + if ((k > 1)) { + dswap((k - 1), A, ca, ai(kk, 1), A, ca, ai(kp, 1)); + } + dswap(kk, W, cw, wi(kk, 1), W, cw, wi(kp, 1)); + } + if ((kstep === 1)) { + copy(((N - k) + 1), W, rw, wi(k, k), A, ra, ai(k, k)); + if ((k < N)) { + r1 = (1 / A[ai(k, k)]); + dscal((N - k), r1, A, ra, ai((k + 1), k)); + } + } else { + if ((k < (N - 1))) { + d21 = W[wi((k + 1), k)]; + d11 = (W[wi((k + 1), (k + 1))] / d21); + d22 = (W[wi(k, k)] / d21); + t = (1 / (((d11 * d22) - 1))); + d21 = (t / d21); + for (j = (k + 2); (j <= N); j++) { + A[ai(j, k)] = (d21 * (((d11 * W[wi(j, k)]) - W[wi(j, (k + 1))]))); + A[ai(j, (k + 1))] = (d21 * (((d22 * W[wi(j, (k + 1))]) - W[wi(j, k)]))); + } + } + A[ai(k, k)] = W[wi(k, k)]; + A[ai((k + 1), k)] = W[wi((k + 1), k)]; + A[ai((k + 1), (k + 1))] = W[wi((k + 1), (k + 1))]; + } + } + if ((kstep === 1)) { + P[(op + (((k - 1)) * sp))] = kp; + } else { + P[(op + (((k - 1)) * sp))] = -kp; + P[(op + (k * sp))] = -kp; + } + k += kstep; + } + if (((((N - k) + 1) > 0) && ((k - 1) > 0))) { + triangular(u, ((N - k) + 1), (k - 1), A, ra, ca, ai(k, 1), W, rw, cw, wi(k, 1), ai(k, k)); + } + j = (k - 1); + while (true) { + jj = j; + jp = P[(op + (((j - 1)) * sp))]; + if ((jp < 0)) { + jp = -jp; + j -= 1; + } + j -= 1; + if (((jp !== jj) && (j >= 1))) { + dswap(j, A, ca, ai(jp, 1), A, ca, ai(jj, 1)); + } + if ((j <= 1)) { + break; + } + } + KB[okb] = (k - 1); + } + return info; + /** +* Resolves a one-based logical matrix cell. +* @private +* @param {integer} i - row +* @param {integer} j - column +* @returns {integer} physical index +*/ + function ai(i, j) { + return ((oa + (((i - 1)) * ra)) + (((j - 1)) * ca)); + } + /** +* Resolves a one-based logical scratch cell. +* @private +* @param {integer} i - row +* @param {integer} j - column +* @returns {integer} physical index +*/ + function wi(i, j) { + return ((ow + (((i - 1)) * rw)) + (((j - 1)) * cw)); + } +} + + +// EXPORTS // + +module.exports = base; diff --git a/lib/node_modules/@stdlib/lapack/base/dlasyf/lib/can_use_native.js b/lib/node_modules/@stdlib/lapack/base/dlasyf/lib/can_use_native.js new file mode 100644 index 000000000000..4986882b6a42 --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dlasyf/lib/can_use_native.js @@ -0,0 +1,108 @@ +/** +* @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 abs = require( '@stdlib/math/base/special/abs' ); +var maxValue = require( '@stdlib/math/base/special/max' ); +var min = require( '@stdlib/math/base/special/min' ); + + +// MAIN // + +/** +* Checks a conservative configured-width domain before native dispatch. +* @private +* @param {ArrayLike} a - normalized arguments +* @returns {boolean} eligible +*/ +function canUseNative(a) { + var slots; + var rows; + var cols; + var max; + var lo; + var hi; + var s; + var o; + var x; + var y; + var i; + max = 2147483640; + if ((a[1] === 0)) { + return (((a[2] <= max) && (a[4] >= 0)) && (a[4] <= max)); + } + slots = [ + 1, + 2, + 4, + 6, + 7, + 8, + 10, + 11, + 13, + 14, + 15 + ]; + for (i = 0; (i < slots.length); i++) { + s = a[slots[i]]; + if (((s < -max) || (s > max))) { + return false; + } + } + if ((a[1] > (max - 2))) { + return false; + } + for (i = 0; (i < 3); i++) { + rows = a[1]; + cols = 1; + if ( (i === 0) ) { + cols = a[1]; + } else if ( (i === 2) ) { + cols = a[2]; + } + s = 13; + if ( (i === 0) ) { + s = 6; + } else if ( (i === 1) ) { + s = 10; + } + o = 15; + if ( (i === 0) ) { + o = 8; + } else if ( (i === 1) ) { + o = 11; + } + x = (((rows - 1)) * a[s]); + y = ( (cols > 1) ) ? (((cols - 1)) * a[(s + 1)]) : 0; + lo = ((a[o] + min(x, 0)) + min(y, 0)); + hi = ((a[o] + maxValue(x, 0)) + maxValue(y, 0)); + if (((((((x < -max) || (x > max)) || (y < -max)) || (y > max)) || (lo < 0)) || (hi > max))) { + return false; + } + if (((i !== 1) && (((((rows * abs(a[s])) + 7) > max) || (((cols * abs(a[(s + 1)])) + 7) > max))))) { + return false; + } + } + return true; +} + + +// EXPORTS // + +module.exports = canUseNative; diff --git a/lib/node_modules/@stdlib/lapack/base/dlasyf/lib/factory.js b/lib/node_modules/@stdlib/lapack/base/dlasyf/lib/factory.js new file mode 100644 index 000000000000..b288f93b481a --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dlasyf/lib/factory.js @@ -0,0 +1,140 @@ +/** +* @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 triangle and dimensions before accessing output buffers. +* @private +* @param {string|integer} u - triangle +* @param {integer} N - order +* @param {integer} NB - panel width +* @throws {RangeError} invalid argument +* @throws {TypeError} invalid argument +* @returns {integer} normalized triangle +*/ +function scalars(u, N, NB) { + if (((((u !== 'upper') && (u !== 'lower')) && (u !== 121)) && (u !== 122))) { + throw new TypeError('invalid argument. Invalid triangle.'); + } + if (((!isSafeInteger(N) || (N < 0)) || (N > 2147483647))) { + throw new RangeError('invalid argument. N must be in the nonnegative signed32 domain.'); + } + if (((!isSafeInteger(NB) || (NB < 2)) || (NB > 2147483647))) { + throw new RangeError('invalid argument. NB must be a signed32 integer at least two.'); + } + return ( ((u === 'upper') || (u === 121)) ) ? 121 : 122; +} + + +// MAIN // + +/** +* Creates the proposed contiguous and ndarray public interfaces. +* @private +* @param {Function} base - validated normalized kernel +* @returns {Function} public interfaces +*/ +function factory(base) { + setReadOnly(dlasyf, 'ndarray', ndarray); + return dlasyf; + /** +* Computes a symmetric Bunch-Kaufman factor panel. +* @private +* @param {string|integer} order - layout +* @param {string|integer} uplo - triangle +* @param {integer} N - order +* @param {integer} NB - panel width +* @param {Int32Array} KB - column-count output +* @param {Float64Array} A - matrix +* @param {integer} LDA - matrix leading dimension +* @param {Int32Array} IPIV - signed one-based pivot output +* @param {Float64Array} W - scratch +* @param {integer} LDW - scratch leading dimension +* @throws {RangeError} invalid argument +* @throws {TypeError} invalid argument +* @returns {integer} INFO +*/ + function dlasyf(order, uplo, N, NB, KB, A, LDA, IPIV, W, LDW) { + // eslint-disable-line max-params + var column; + var ra; + var ca; + var rw; + var cw; + var u; + if (((((order !== 'row-major') && (order !== 'column-major')) && (order !== 101)) && (order !== 102))) { + throw new TypeError('invalid argument. Invalid layout.'); + } + u = scalars(uplo, N, NB); + column = ((order === 'column-major') || (order === 102)); + if (((!isSafeInteger(LDA) || (LDA < 1)) || (LDA < N))) { + throw new RangeError('invalid argument. Invalid matrix leading dimension.'); + } + if (((!isSafeInteger(LDW) || (LDW < 1)) || (LDW < (( column ) ? N : NB)))) { + throw new RangeError('invalid argument. Invalid scratch leading dimension.'); + } + ra = ( column ) ? 1 : LDA; + ca = ( column ) ? LDA : 1; + rw = ( column ) ? 1 : LDW; + cw = ( column ) ? LDW : 1; + validate(N, NB, KB, 0, A, ra, ca, 0, IPIV, 1, 0, W, rw, cw, 0); + return base(u, N, NB, KB, 0, A, ra, ca, 0, IPIV, 1, 0, W, rw, cw, 0); + } + /** +* Computes a panel using independent indexed views. +* @private +* @param {string|integer} uplo - triangle +* @param {integer} N - order +* @param {integer} NB - width +* @param {Int32Array} KB - count output +* @param {integer} okb - count offset +* @param {Float64Array} A - matrix +* @param {integer} ra - row stride +* @param {integer} ca - column stride +* @param {integer} oa - matrix offset +* @param {Int32Array} P - pivots +* @param {integer} sp - pivot stride +* @param {integer} op - pivot offset +* @param {Float64Array} W - scratch +* @param {integer} rw - scratch row stride +* @param {integer} cw - scratch column stride +* @param {integer} ow - scratch offset +* @returns {integer} INFO +*/ + function ndarray(uplo, N, NB, KB, okb, A, ra, ca, oa, P, sp, op, W, rw, cw, ow) { // eslint-disable-line max-params + // eslint-disable-line max-params + var u; + u = scalars(uplo, N, NB); + validate(N, NB, KB, okb, A, ra, ca, oa, P, sp, op, W, rw, cw, ow); + return base(u, N, NB, KB, okb, A, ra, ca, oa, P, sp, op, W, rw, cw, ow); + } +} + + +// EXPORTS // + +module.exports = factory; diff --git a/lib/node_modules/@stdlib/lapack/base/dlasyf/lib/index.js b/lib/node_modules/@stdlib/lapack/base/dlasyf/lib/index.js new file mode 100644 index 000000000000..84b7ec5bd1b8 --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dlasyf/lib/index.js @@ -0,0 +1,31 @@ +/** +* @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. +*/ + +/** +* Compute a symmetric Bunch-Kaufman factorization panel. +* @module @stdlib/lapack/base/dlasyf +*/ +'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/dlasyf/lib/main.js b/lib/node_modules/@stdlib/lapack/base/dlasyf/lib/main.js new file mode 100644 index 000000000000..49eccc607e1a --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dlasyf/lib/main.js @@ -0,0 +1,23 @@ +/** +* @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/dlasyf/lib/native.js b/lib/node_modules/@stdlib/lapack/base/dlasyf/lib/native.js new file mode 100644 index 000000000000..122a2ba45d94 --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dlasyf/lib/native.js @@ -0,0 +1,38 @@ +/** +* @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 only eligible geometry to the actual addon. +* @private +* @returns {integer} INFO +*/ +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/dlasyf/lib/validate.js b/lib/node_modules/@stdlib/lapack/base/dlasyf/lib/validate.js new file mode 100644 index 000000000000..5dc26589af9a --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dlasyf/lib/validate.js @@ -0,0 +1,203 @@ +/** +* @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 getPrototypeOf = require( '@stdlib/utils/get-prototype-of' ); +var descriptor = require( '@stdlib/utils/property-descriptor' ); +var isSafeInteger = require( '@stdlib/assert/is-safe-integer' ).isPrimitive; + + +// VARIABLES // + +var prototype = getPrototypeOf(Float64Array.prototype); +var getLength = descriptor(prototype, 'length').get; +var getBuffer = descriptor(prototype, 'buffer').get; +var getOffset = descriptor(prototype, 'byteOffset').get; +var getTag = descriptor(prototype, Symbol.toStringTag).get; +var getBufferLength = descriptor(ArrayBuffer.prototype, 'byteLength').get; +var MAX = 9007199254740991; + + +// FUNCTIONS // + +/** +* Adds exactly representable indexed integers. +* @private +* @param {integer} a - first integer +* @param {integer} b - second integer +* @throws {RangeError} invalid argument +* @returns {integer} exact sum +*/ +function add(a, b) { + if ((((b > 0) && (a > (MAX - b))) || ((b < 0) && (a < (-MAX - b))))) { + throw new RangeError('invalid argument. Inexact indexed arithmetic.'); + } + return (a + b); +} +/** +* Resolves a positive greatest common divisor. +* @private +* @param {integer} a - first magnitude +* @param {integer} b - second magnitude +* @returns {integer} divisor +*/ +function gcd(a, b) { + var r; + while ((b !== 0)) { + r = (a % b); + a = b; + b = r; + } + return a; +} +/** +* Captures and validates an ordinary typed view and exact byte envelope. +* @private +* @param {TypedArray} x - view +* @param {integer} rows - row extent +* @param {integer} cols - column extent +* @param {integer} r - row stride +* @param {integer} c - column stride +* @param {integer} o - offset +* @param {string} dtype - intrinsic type +* @throws {RangeError} invalid argument +* @throws {TypeError} invalid argument +* @returns {Array} backing buffer and half-open envelope +*/ +function view(x, rows, cols, r, c, o, dtype) { + var buffer; + var bytes; + var lo; + var hi; + var a; + var b; + var g; + if ((getTag.call(x) !== dtype)) { + throw new TypeError('invalid argument. Incorrect intrinsic typed-array dtype.'); + } + buffer = getBuffer.call(x); + getBufferLength.call(buffer); + if (((!isSafeInteger(r) || !isSafeInteger(c)) || !isSafeInteger(o))) { + throw new RangeError('invalid argument. Strides and offsets must be safe integers.'); + } + if ((((rows > 1) && (r === 0)) || ((cols > 1) && (c === 0)))) { + throw new RangeError('invalid argument. Mutable indexed views must be injective.'); + } + if (((rows > 1) && (cols > 1))) { + g = gcd(( (r < 0) ) ? -r : r, ( (c < 0) ) ? -c : c); + if (((((( (r < 0) ) ? -r : r) / g) < cols) && (((( (c < 0) ) ? -c : c) / g) < rows))) { + throw new RangeError('invalid argument. Matrix coordinates collide.'); + } + } + a = (((rows - 1)) * r); + b = (((cols - 1)) * c); + if ((!isSafeInteger(a) || !isSafeInteger(b))) { + throw new RangeError('invalid argument. Inexact indexed products.'); + } + lo = add(add(o, ( (a < 0) ) ? a : 0), ( (b < 0) ) ? b : 0); + hi = add(add(o, ( (a > 0) ) ? a : 0), ( (b > 0) ) ? b : 0); + if (((lo < 0) || (hi >= getLength.call(x)))) { + throw new RangeError('invalid argument. Insufficient indexed storage.'); + } + bytes = ( (dtype === 'Float64Array') ) ? 8 : 4; + a = (lo * bytes); + b = (((hi + 1)) * bytes); + if ((!isSafeInteger(a) || !isSafeInteger(b))) { + throw new RangeError('invalid argument. Inexact byte envelope.'); + } + return [ + buffer, + add(getOffset.call(x), a), + add(getOffset.call(x), b) + ]; +} +/** +* Rejects every pair of overlapping active byte envelopes. +* @private +* @param {Array} views - captured envelopes +* @throws {RangeError} invalid argument +* @returns {void} +*/ +function disjoint(views) { + var a; + var b; + var i; + var j; + for (i = 0; (i < views.length); i++) { + a = views[i]; + for (j = (i + 1); (j < views.length); j++) { + b = views[j]; + if ((((a[0] === b[0]) && (a[1] < b[2])) && (b[1] < a[2]))) { + throw new RangeError('invalid argument. Active indexed byte envelopes must be disjoint.'); + } + } + } +} + + +// MAIN // + +/** +* Validates all active views before any output is modified. +* @private +* @param {integer} N - order +* @param {integer} NB - width +* @param {Int32Array} KB - column-count output +* @param {integer} okb - column-count offset +* @param {Float64Array} A - matrix +* @param {integer} ra - row stride +* @param {integer} ca - column stride +* @param {integer} oa - matrix offset +* @param {Int32Array} P - output pivots +* @param {integer} sp - pivot stride +* @param {integer} op - pivot offset +* @param {Float64Array} W - scratch +* @param {integer} rw - scratch row stride +* @param {integer} cw - scratch column stride +* @param {integer} ow - scratch offset +* @returns {void} +*/ +function validate(N, NB, KB, okb, A, ra, ca, oa, P, sp, op, W, rw, cw, ow) { // eslint-disable-line max-params + var kb; + var a; + var p; + var w; + kb = view(KB, 1, 1, 0, 0, okb, 'Int32Array'); + if ((N === 0)) { + return; + } + a = view(A, N, N, ra, ca, oa, 'Float64Array'); + p = view(P, N, 1, sp, 0, op, 'Int32Array'); + w = view(W, N, NB, rw, cw, ow, 'Float64Array'); + disjoint([ + kb, + a, + p, + w + ]); +} + + +// EXPORTS // + +module.exports = validate; diff --git a/lib/node_modules/@stdlib/lapack/base/dlasyf/manifest.json b/lib/node_modules/@stdlib/lapack/base/dlasyf/manifest.json new file mode 100644 index 000000000000..c423f1adba39 --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dlasyf/manifest.json @@ -0,0 +1,101 @@ +{ + "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/dlasyf.c", + "./src/dlasyf_ndarray.c" + ], + "include": [ + "./include" + ], + "libraries": [ + "-lm" + ], + "libpath": [], + "dependencies": [ + "@stdlib/lapack/base/shared", + "@stdlib/lapack/base/xerbla", + "@stdlib/blas/base/dcopy", + "@stdlib/blas/base/dscal", + "@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/dlasyf.c", + "./src/dlasyf_ndarray.c" + ], + "include": [ + "./include" + ], + "libraries": [ + "-lm" + ], + "libpath": [], + "dependencies": [ + "@stdlib/lapack/base/shared", + "@stdlib/lapack/base/xerbla", + "@stdlib/blas/base/dcopy", + "@stdlib/blas/base/dscal", + "@stdlib/blas/base/dswap" + ] + }, + { + "task": "examples", + "wasm": false, + "src": [ + "./src/dlasyf.c", + "./src/dlasyf_ndarray.c" + ], + "include": [ + "./include" + ], + "libraries": [ + "-lm" + ], + "libpath": [], + "dependencies": [ + "@stdlib/lapack/base/shared", + "@stdlib/lapack/base/xerbla", + "@stdlib/blas/base/dcopy", + "@stdlib/blas/base/dscal", + "@stdlib/blas/base/dswap" + ] + } + ] +} diff --git a/lib/node_modules/@stdlib/lapack/base/dlasyf/package.json b/lib/node_modules/@stdlib/lapack/base/dlasyf/package.json new file mode 100644 index 000000000000..2ce9f67da5c5 --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dlasyf/package.json @@ -0,0 +1,80 @@ +{ + "name": "@stdlib/lapack/base/dlasyf", + "version": "0.0.0", + "description": "Compute a partial symmetric Bunch-Kaufman factorization.", + "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": ">=8.0.0", + "npm": ">2.7.0" + }, + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "keywords": [ + "stdlib", + "stdmath", + "mathematics", + "math", + "lapack", + "dlasyf", + "symmetric", + "indefinite", + "bunch-kaufman", + "pivot", + "factor", + "panel", + "linear", + "algebra", + "subroutines", + "array", + "ndarray", + "matrix", + "float64", + "double", + "float64array", + "int32array" + ], + "__stdlib__": {} +} diff --git a/lib/node_modules/@stdlib/lapack/base/dlasyf/src/Makefile b/lib/node_modules/@stdlib/lapack/base/dlasyf/src/Makefile new file mode 100644 index 000000000000..2caf905cedbe --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dlasyf/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/dlasyf/src/addon.c b/lib/node_modules/@stdlib/lapack/base/dlasyf/src/addon.c new file mode 100644 index 000000000000..b4dcbb524772 --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dlasyf/src/addon.c @@ -0,0 +1,182 @@ +/** +* @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/dlasyf.h" +#include "stdlib/napi/export.h" +#include "stdlib/napi/argv.h" +#include "stdlib/napi/create_int32.h" +#include +#include +#include +#include + +#define META_MAX INT64_C(2147483640) + +/** Captured intrinsic typed view and its physical indexed envelope. */ +typedef struct view_s { + void *data; + size_t length; + uintptr_t lo; + uintptr_t hi; +} view_t; + +/** +* Parses exact Numbers in the conservative native metadata domain. +* @param env environment +* @param value argument +* @param out integer output +* @return success +*/ +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_get_value_double(env,value,&v) != napi_ok ) { + napi_throw_type_error(env,NULL,"invalid argument. Metadata must be Numbers."); return 0; + } + if ( !(v >= -(double)META_MAX && v <= (double)META_MAX) ) { + napi_throw_range_error(env,NULL,"invalid argument. Metadata exceeds the conservative native 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; +} + +/** +* Extracts an intrinsic ordinary-ArrayBuffer-backed typed view. +* @param env environment +* @param value view argument +* @param dtype required dtype +* @param out view output +* @return success +*/ +static int typed( napi_env env, napi_value value, napi_typedarray_type dtype, view_t *out ) { + napi_typedarray_type type; + napi_value buffer; + bool is_array; + if ( napi_get_typedarray_info(env,value,&type,&out->length,&out->data,&buffer,NULL) != napi_ok || type != dtype || napi_is_arraybuffer(env,buffer,&is_array) != napi_ok || !is_array ) { + napi_throw_type_error(env,NULL,"invalid argument. Must provide the documented intrinsic ordinary typed buffers."); return 0; + } + return 1; +} + +/** +* Validates injective rectangles and exact physical pointer envelopes. +* @param v intrinsic view +* @param rows first extent +* @param cols second extent +* @param r first stride +* @param c second stride +* @param o offset +* @param size element size +* @return success +*/ +static int bounds( view_t *v, int64_t rows, int64_t cols, int64_t r, int64_t c, int64_t o, size_t size ) { + int64_t a; + int64_t b; + int64_t lo; + int64_t hi; + uint64_t x; + uint64_t y; + uint64_t g; + uint64_t q; + uintptr_t base; + uintptr_t end; + if ( (rows > 1 && r == 0) || (cols > 1 && c == 0) ) { return 0; } + if ( rows > 1 && cols > 1 ) { + x=(uint64_t)((r < 0) ? -r : r); y=(uint64_t)((c < 0) ? -c : c); g=x; q=y; + while ( q != 0 ) { uint64_t next=g%q; g=q; q=next; } + if ( x/g < (uint64_t)cols && y/g < (uint64_t)rows ) { return 0; } + } + a=(rows-1)*r; b=(cols-1)*c; + if ( a < -META_MAX || a > META_MAX || b < -META_MAX || b > META_MAX ) { return 0; } + lo=o+((a < 0) ? a : 0)+((b < 0) ? b : 0); + hi=o+((a > 0) ? a : 0)+((b > 0) ? b : 0); + if ( lo < 0 || hi > META_MAX || (uintmax_t)hi >= v->length || v->data == NULL || (uintmax_t)hi+1 > UINTPTR_MAX/size ) { return 0; } + base=(uintptr_t)v->data; end=((uintptr_t)hi+1)*size; + if ( base > UINTPTR_MAX-end ) { return 0; } + v->lo=base+(uintptr_t)lo*size; v->hi=base+end; + return 1; +} + +/** +* Checks physical disjointness without using buffer object identity. +* @param v four captured active views +* @return success +*/ +static int disjoint( const view_t *v ) { + size_t i; + size_t j; + for ( i=0; i<4; i++ ) { + for ( j=i+1; j<4; j++ ) { + if ( v[i].lo < v[j].hi && v[j].lo < v[i].hi ) { return 0; } + } + } + return 1; +} + +/** +* Executes a validated panel with private configured-width pivot staging. +* @param env environment +* @param info call metadata +* @return INFO numeric result +*/ +static napi_value addon( napi_env env, napi_callback_info info ) { + view_t v[4]; + int64_t n[16]; + const size_t slots[]={0,1,2,4,6,7,8,10,11,13,14,15}; + LAPACK_INT *pivots; + LAPACK_INT kb; + LAPACK_INT result; + int64_t first; + int64_t i; + int32_t *p; + int32_t *k; + STDLIB_NAPI_ARGV(env,info,argv,argc,16); + for ( i=0; i<3; i++ ) { if ( !integer(env,argv[i],&n[i]) ) { return NULL; } } + if ( (n[0] != LAPACK_UPPER_TRIANGLE && n[0] != LAPACK_LOWER_TRIANGLE) || n[1] < 0 || n[2] < 2 ) { + napi_throw_range_error(env,NULL,"invalid argument. Invalid selectors or dimensions."); return NULL; + } + if ( !typed(env,argv[3],napi_int32_array,&v[0]) || !integer(env,argv[4],&n[4]) ) { return NULL; } + if ( !bounds(&v[0],1,1,0,0,n[4],4) ) { napi_throw_range_error(env,NULL,"invalid argument. Invalid KB view."); return NULL; } + k=(int32_t *)v[0].data; + if ( n[1] == 0 ) { + k[n[4]]=0; + STDLIB_NAPI_CREATE_INT32(env,0,empty); return empty; + } + for ( i=3; i<(int64_t)(sizeof(slots)/sizeof(slots[0])); i++ ) { + if ( !integer(env,argv[slots[i]],&n[slots[i]]) ) { return NULL; } + } + if ( !typed(env,argv[5],napi_float64_array,&v[1]) || !typed(env,argv[9],napi_int32_array,&v[2]) || !typed(env,argv[12],napi_float64_array,&v[3]) ) { return NULL; } + if ( !bounds(&v[1],n[1],n[1],n[6],n[7],n[8],8) || !bounds(&v[2],n[1],1,n[10],0,n[11],4) || !bounds(&v[3],n[1],n[2],n[13],n[14],n[15],8) || !disjoint(v) || n[1] > META_MAX-2 || n[1]*((n[6] < 0) ? -n[6] : n[6])+7 > META_MAX || n[1]*((n[7] < 0) ? -n[7] : n[7])+7 > META_MAX || n[1]*((n[13] < 0) ? -n[13] : n[13])+7 > META_MAX || n[2]*((n[14] < 0) ? -n[14] : n[14])+7 > META_MAX ) { + napi_throw_range_error(env,NULL,"invalid argument. Invalid, overlapping or unrepresentable indexed geometry."); return NULL; + } + if ( (uintmax_t)n[1] > 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[1]*sizeof(LAPACK_INT)); + if ( pivots == NULL ) { napi_throw_error(env,NULL,"allocation failed. Unable to stage pivot output."); return NULL; } + result=API_SUFFIX(c_dlasyf_ndarray)((LAPACK_UPLO)n[0],(LAPACK_INT)n[1],(LAPACK_INT)n[2],&kb,0,(double *)v[1].data,(LAPACK_INT)n[6],(LAPACK_INT)n[7],(LAPACK_INT)n[8],pivots,1,0,(double *)v[3].data,(LAPACK_INT)n[13],(LAPACK_INT)n[14],(LAPACK_INT)n[15]); + if ( result < 0 ) { free(pivots); napi_throw_range_error(env,NULL,"invalid argument. Native core rejected metadata."); return NULL; } + first=(n[0] == LAPACK_UPPER_TRIANGLE) ? n[1]-kb : 0; + p=(int32_t *)v[2].data; + for ( i=first; i= -9 && info <= -7 ) info = -7; + else if ( info >= -12 && info <= -10 ) info = -8; + else if ( info == -13 ) info = -9; + else if ( info <= -14 ) info = -10; + return dlasyf_error( "c_dlasyf", info ); + } + return API_SUFFIX(c_dlasyf_ndarray)( uplo, N, NB, KB, 0, A, strideA1, strideA2, 0, IPIV, 1, 0, W, strideW1, strideW2, 0 ); +} diff --git a/lib/node_modules/@stdlib/lapack/base/dlasyf/src/dlasyf_ndarray.c b/lib/node_modules/@stdlib/lapack/base/dlasyf/src/dlasyf_ndarray.c new file mode 100644 index 000000000000..5d95b7d04040 --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dlasyf/src/dlasyf_ndarray.c @@ -0,0 +1,327 @@ +/** +* @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. +*/ + +/* +* Adapted from Reference-LAPACK DLASYF, commit +* 2e5d9c1273435fbd953adb294ed603e4789afaba, SRC/dlasyf.f, +* blob 68e0087f38a226fa0b193bad6c23b13442d5b75c. +* Private DGEMMTR-derived updates retain Martin Koehler's attribution in +* dlasyf_panel.h. The upstream algorithm is licensed under these 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. +*/ + +#include "stdlib/lapack/base/dlasyf.h" +#include "validation.h" +#include "dlasyf_panel.h" + +/** +* Computes a partial symmetric factorization using alternative indexing. +* +* @param uplo selected matrix triangle +* @param N matrix order +* @param NB maximum factor panel width, at least two +* @param KB scalar output number of factorized columns +* @param offsetKB KB output index +* @param A input/output matrix +* @param strideA1 first matrix dimension stride +* @param strideA2 second matrix dimension stride +* @param offsetA matrix starting index +* @param IPIV signed one-based pivot output +* @param strideIPIV pivot stride +* @param offsetIPIV pivot starting index +* @param W N-by-NB workspace +* @param strideW1 first workspace dimension stride +* @param strideW2 second workspace dimension stride +* @param offsetW workspace starting index +* @return INFO or a negative argument position +*/ +LAPACK_INT API_SUFFIX(c_dlasyf_ndarray)( const LAPACK_UPLO uplo, const LAPACK_INT N, const LAPACK_INT NB, LAPACK_INT *KB, const LAPACK_INT offsetKB, double *A, const LAPACK_INT strideA1, const LAPACK_INT strideA2, const LAPACK_INT offsetA, LAPACK_INT *IPIV, const LAPACK_INT strideIPIV, const LAPACK_INT offsetIPIV, double *W, const LAPACK_INT strideW1, const LAPACK_INT strideW2, const LAPACK_INT offsetW ) { + const intmax_t n = (intmax_t)N; + const intmax_t nb = (intmax_t)NB; + const double alpha = ( 1.0+sqrt( 17.0 ) )/8.0; + dlasyf_view a; + dlasyf_view w; + LAPACK_INT error; + LAPACK_INT info; + intmax_t imax; + intmax_t jmax; + intmax_t kstep; + intmax_t kkw; + intmax_t kw; + intmax_t kk; + intmax_t kp; + intmax_t jj; + intmax_t jp; + intmax_t k; + intmax_t j; + double absakk; + double colmax; + double rowmax; + double d11; + double d21; + double d22; + double r1; + double t; + + error = dlasyf_validate( uplo, N, NB, KB, offsetKB, A, strideA1, strideA2, offsetA, IPIV, strideIPIV, offsetIPIV, W, strideW1, strideW2, offsetW ); + if ( error != 0 ) return dlasyf_error( "c_dlasyf_ndarray", error ); + if ( N == 0 ) { + KB[ offsetKB ] = 0; + return 0; + } + a.data = A; + a.stride1 = strideA1; + a.stride2 = strideA2; + a.offset = offsetA; + w.data = W; + w.stride1 = strideW1; + w.stride2 = strideW2; + w.offset = offsetW; + info = 0; + + if ( uplo == LAPACK_UPPER_TRIANGLE ) { + // Factor the trailing panel in decreasing one-based column order. + k = n; + while ( k >= 1 && !( nb < n && k <= n-nb+1 ) ) { + kw = nb-(n-k); + dlasyf_copy( k, &a, 1, k, 0, &w, 1, kw, 0 ); + if ( k < n ) dlasyf_gemv( k, n-k, &a, 1, k+1, &w, k, kw+1, 1, kw ); + kstep = 1; + absakk = fabs( DLASYF_CELL( &w, k, kw ) ); + imax = k; + colmax = 0.0; + if ( k > 1 ) { + imax = 1+dlasyf_first_max( k-1, &w, 1, kw ); + colmax = fabs( DLASYF_CELL( &w, imax, kw ) ); + } + if ( fmax( absakk, colmax ) == 0.0 ) { + if ( info == 0 ) info = (LAPACK_INT)k; + kp = k; + } else { + if ( k == 1 || absakk >= alpha*colmax ) { + kp = k; + } else { + dlasyf_copy( imax, &a, 1, imax, 0, &w, 1, kw-1, 0 ); + dlasyf_copy( k-imax, &a, imax, imax+1, 1, &w, imax+1, kw-1, 0 ); + if ( k < n ) dlasyf_gemv( k, n-k, &a, 1, k+1, &w, imax, kw+1, 1, kw-1 ); + jmax = imax+1+dlasyf_first_max( k-imax, &w, imax+1, kw-1 ); + rowmax = fabs( DLASYF_CELL( &w, jmax, kw-1 ) ); + if ( imax > 1 ) { + jmax = 1+dlasyf_first_max( imax-1, &w, 1, kw-1 ); + rowmax = fmax( rowmax, fabs( DLASYF_CELL( &w, jmax, kw-1 ) ) ); + } + if ( absakk >= alpha*colmax*( colmax/rowmax ) ) { + kp = k; + } else if ( fabs( DLASYF_CELL( &w, imax, kw-1 ) ) >= alpha*rowmax ) { + kp = imax; + dlasyf_copy( k, &w, 1, kw-1, 0, &w, 1, kw, 0 ); + } else { + kp = imax; + kstep = 2; + } + } + kk = k-kstep+1; + kkw = nb-(n-kk); + if ( kp != kk ) { + DLASYF_CELL( &a, kp, kp ) = DLASYF_CELL( &a, kk, kk ); + dlasyf_copy( kk-1-kp, &a, kp+1, kk, 0, &a, kp, kp+1, 1 ); + if ( kp > 1 ) dlasyf_copy( kp-1, &a, 1, kk, 0, &a, 1, kp, 0 ); + if ( k < n ) dlasyf_swap( n-k, &a, kk, kp, k+1 ); + dlasyf_swap( n-kk+1, &w, kk, kp, kkw ); + } + // The pivot-selection branch above sets kstep=2 for a 2-by-2 block. + // cppcheck-suppress knownConditionTrueFalse + if ( kstep == 1 ) { + dlasyf_copy( k, &w, 1, kw, 0, &a, 1, k, 0 ); + r1 = 1.0/DLASYF_CELL( &a, k, k ); + dlasyf_scale( k-1, r1, &a, 1, k ); + } else { + if ( k > 2 ) { + d21 = DLASYF_CELL( &w, k-1, kw ); + d11 = DLASYF_CELL( &w, k, kw )/d21; + d22 = DLASYF_CELL( &w, k-1, kw-1 )/d21; + t = 1.0/( d11*d22-1.0 ); + d21 = t/d21; + for ( j = 1; j <= k-2; j++ ) { + DLASYF_CELL( &a, j, k-1 ) = d21*( d11*DLASYF_CELL( &w, j, kw-1 )-DLASYF_CELL( &w, j, kw ) ); + DLASYF_CELL( &a, j, k ) = d21*( d22*DLASYF_CELL( &w, j, kw )-DLASYF_CELL( &w, j, kw-1 ) ); + } + } + DLASYF_CELL( &a, k-1, k-1 ) = DLASYF_CELL( &w, k-1, kw-1 ); + DLASYF_CELL( &a, k-1, k ) = DLASYF_CELL( &w, k-1, kw ); + DLASYF_CELL( &a, k, k ) = DLASYF_CELL( &w, k, kw ); + } + } + IPIV[ (intmax_t)offsetIPIV+(k-1)*strideIPIV ] = (LAPACK_INT)(kstep == 1 ? kp : -kp); + if ( kstep == 2 ) IPIV[ (intmax_t)offsetIPIV+(k-2)*strideIPIV ] = (LAPACK_INT)-kp; + k -= kstep; + } + kw = nb-(n-k); + if ( k > 0 && n-k > 0 ) dlasyf_triangular( uplo, k, n-k, &a, 1, 1, 1, k+1, &w, 1, kw+1 ); + j = k+1; + while ( j <= n ) { + jj = j; + jp = IPIV[ (intmax_t)offsetIPIV+(j-1)*strideIPIV ]; + if ( jp < 0 ) { + jp = -jp; + j += 1; + } + j += 1; + if ( jp != jj && j <= n ) dlasyf_swap( n-j+1, &a, jp, jj, j ); + } + KB[ offsetKB ] = (LAPACK_INT)(n-k); + } else { + // Factor the leading panel in increasing one-based column order. + k = 1; + while ( k <= n && !( nb < n && k >= nb ) ) { + dlasyf_copy( n-k+1, &a, k, k, 0, &w, k, k, 0 ); + if ( k > 1 ) dlasyf_gemv( n-k+1, k-1, &a, k, 1, &w, k, 1, k, k ); + kstep = 1; + absakk = fabs( DLASYF_CELL( &w, k, k ) ); + imax = k; + colmax = 0.0; + if ( k < n ) { + imax = k+1+dlasyf_first_max( n-k, &w, k+1, k ); + colmax = fabs( DLASYF_CELL( &w, imax, k ) ); + } + if ( fmax( absakk, colmax ) == 0.0 ) { + if ( info == 0 ) info = (LAPACK_INT)k; + kp = k; + } else { + if ( k == n || absakk >= alpha*colmax ) { + kp = k; + } else { + dlasyf_copy( imax-k, &a, imax, k, 1, &w, k, k+1, 0 ); + dlasyf_copy( n-imax+1, &a, imax, imax, 0, &w, imax, k+1, 0 ); + if ( k > 1 ) dlasyf_gemv( n-k+1, k-1, &a, k, 1, &w, imax, 1, k, k+1 ); + jmax = k+dlasyf_first_max( imax-k, &w, k, k+1 ); + rowmax = fabs( DLASYF_CELL( &w, jmax, k+1 ) ); + if ( imax < n ) { + jmax = imax+1+dlasyf_first_max( n-imax, &w, imax+1, k+1 ); + rowmax = fmax( rowmax, fabs( DLASYF_CELL( &w, jmax, k+1 ) ) ); + } + if ( absakk >= alpha*colmax*( colmax/rowmax ) ) { + kp = k; + } else if ( fabs( DLASYF_CELL( &w, imax, k+1 ) ) >= alpha*rowmax ) { + kp = imax; + dlasyf_copy( n-k+1, &w, k, k+1, 0, &w, k, k, 0 ); + } else { + kp = imax; + kstep = 2; + } + } + kk = k+kstep-1; + if ( kp != kk ) { + DLASYF_CELL( &a, kp, kp ) = DLASYF_CELL( &a, kk, kk ); + dlasyf_copy( kp-kk-1, &a, kk+1, kk, 0, &a, kp, kk+1, 1 ); + if ( kp < n ) dlasyf_copy( n-kp, &a, kp+1, kk, 0, &a, kp+1, kp, 0 ); + if ( k > 1 ) dlasyf_swap( k-1, &a, kk, kp, 1 ); + dlasyf_swap( kk, &w, kk, kp, 1 ); + } + if ( kstep == 1 ) { + dlasyf_copy( n-k+1, &w, k, k, 0, &a, k, k, 0 ); + if ( k < n ) { + r1 = 1.0/DLASYF_CELL( &a, k, k ); + dlasyf_scale( n-k, r1, &a, k+1, k ); + } + } else { + if ( k < n-1 ) { + d21 = DLASYF_CELL( &w, k+1, k ); + d11 = DLASYF_CELL( &w, k+1, k+1 )/d21; + d22 = DLASYF_CELL( &w, k, k )/d21; + t = 1.0/( d11*d22-1.0 ); + d21 = t/d21; + for ( j = k+2; j <= n; j++ ) { + DLASYF_CELL( &a, j, k ) = d21*( d11*DLASYF_CELL( &w, j, k )-DLASYF_CELL( &w, j, k+1 ) ); + DLASYF_CELL( &a, j, k+1 ) = d21*( d22*DLASYF_CELL( &w, j, k+1 )-DLASYF_CELL( &w, j, k ) ); + } + } + DLASYF_CELL( &a, k, k ) = DLASYF_CELL( &w, k, k ); + DLASYF_CELL( &a, k+1, k ) = DLASYF_CELL( &w, k+1, k ); + DLASYF_CELL( &a, k+1, k+1 ) = DLASYF_CELL( &w, k+1, k+1 ); + } + } + IPIV[ (intmax_t)offsetIPIV+(k-1)*strideIPIV ] = (LAPACK_INT)(kstep == 1 ? kp : -kp); + if ( kstep == 2 ) IPIV[ (intmax_t)offsetIPIV+k*strideIPIV ] = (LAPACK_INT)-kp; + k += kstep; + } + // In a full panel k=N+1: skip before constructing any derived address. + if ( k <= n && k > 1 ) dlasyf_triangular( uplo, n-k+1, k-1, &a, k, k, k, 1, &w, k, 1 ); + j = k-1; + while ( j >= 1 ) { + jj = j; + jp = IPIV[ (intmax_t)offsetIPIV+(j-1)*strideIPIV ]; + if ( jp < 0 ) { + jp = -jp; + j -= 1; + } + j -= 1; + if ( jp != jj && j >= 1 ) dlasyf_swap( j, &a, jp, jj, 1 ); + } + KB[ offsetKB ] = (LAPACK_INT)(k-1); + } + return info; +} diff --git a/lib/node_modules/@stdlib/lapack/base/dlasyf/src/dlasyf_panel.h b/lib/node_modules/@stdlib/lapack/base/dlasyf/src/dlasyf_panel.h new file mode 100644 index 000000000000..52343e640190 --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dlasyf/src/dlasyf_panel.h @@ -0,0 +1,177 @@ +/** +* @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. +*/ + +/* +* Private reference-order helpers adapted from Reference-LAPACK at commit +* 2e5d9c1273435fbd953adb294ed603e4789afaba: IDAMAX, DGEMV and DGEMMTR. +* DGEMMTR was written on 19-July-2023 by Martin Koehler, MPI Magdeburg. +* The full upstream BSD license is retained in dlasyf_ndarray.c and NOTICE. +*/ +#ifndef STDLIB_LAPACK_BASE_DLASYF_PANEL_H +#define STDLIB_LAPACK_BASE_DLASYF_PANEL_H + +#include "stdlib/blas/base/dcopy.h" +#include "stdlib/blas/base/dscal.h" +#include "stdlib/blas/base/dswap.h" +#include +#include + +typedef struct dlasyf_view { + double *data; + intmax_t stride1; + intmax_t stride2; + intmax_t offset; +} dlasyf_view; + +// One-based logical cells make the pinned panel algorithm's coordinates explicit. +#define DLASYF_CELL( view, row, column ) ( (view)->data[ (view)->offset+((row)-1)*(view)->stride1+((column)-1)*(view)->stride2 ] ) + +/** +* Computes a checked view's physical element index for an active logical cell. +*/ +static intmax_t dlasyf_cell_index( const dlasyf_view *view, const intmax_t row, const intmax_t column ) { + return view->offset+(row-1)*view->stride1+(column-1)*view->stride2; +} + +/** +* Copies a logical vector through guarded existing DCOPY ndarray calls. +* +* Chunks contain at most seven elements so that each unit-stride portable +* call performs at most one unrolled group. Zero counts return before index +* arithmetic or derived pointer formation. Singleton strides are normalized. +*/ +static void dlasyf_copy( const intmax_t count, const dlasyf_view *x, const intmax_t xr, const intmax_t xc, const int xaxis, dlasyf_view *y, const intmax_t yr, const intmax_t yc, const int yaxis ) { + intmax_t strideX; + intmax_t strideY; + intmax_t offsetX; + intmax_t offsetY; + intmax_t length; + intmax_t done; + + if ( count <= 0 ) return; + strideX = xaxis == 0 ? x->stride1 : x->stride2; + strideY = yaxis == 0 ? y->stride1 : y->stride2; + offsetX = dlasyf_cell_index( x, xr, xc ); + offsetY = dlasyf_cell_index( y, yr, yc ); + done = 0; + while ( done < count ) { + length = count-done < 7 ? count-done : 7; + API_SUFFIX(c_dcopy_ndarray)( (CBLAS_INT)length, x->data+offsetX+done*strideX, (CBLAS_INT)(length == 1 ? 1 : strideX), 0, y->data+offsetY+done*strideY, (CBLAS_INT)(length == 1 ? 1 : strideY), 0 ); + done += length; + } +} + +/** +* Scales a logical vector through the existing guarded DSCAL ndarray adapter. +*/ +static void dlasyf_scale( const intmax_t count, const double alpha, dlasyf_view *x, const intmax_t row, const intmax_t column ) { + intmax_t offset; + + if ( count <= 0 ) return; + offset = dlasyf_cell_index( x, row, column ); + API_SUFFIX(c_dscal_ndarray)( (CBLAS_INT)count, alpha, x->data+offset, (CBLAS_INT)(count == 1 ? 1 : x->stride1), 0 ); +} + +/** +* Swaps row fragments through the existing guarded DSWAP ndarray adapter. +*/ +static void dlasyf_swap( const intmax_t count, dlasyf_view *x, const intmax_t row1, const intmax_t row2, const intmax_t column ) { + intmax_t offset1; + intmax_t offset2; + + if ( count <= 0 || row1 == row2 ) return; + offset1 = dlasyf_cell_index( x, row1, column ); + offset2 = dlasyf_cell_index( x, row2, column ); + API_SUFFIX(c_dswap_ndarray)( (CBLAS_INT)count, x->data+offset1, (CBLAS_INT)(count == 1 ? 1 : x->stride2), 0, x->data+offset2, (CBLAS_INT)(count == 1 ? 1 : x->stride2), 0 ); +} + +/** +* Returns the first absolute maximum's logical ordinal without allocation. +*/ +static intmax_t dlasyf_first_max( const intmax_t count, const dlasyf_view *x, const intmax_t row, const intmax_t column ) { + intmax_t winner; + intmax_t i; + double maximum; + double value; + + if ( count < 1 ) return -1; + if ( count == 1 ) return 0; + maximum = fabs( DLASYF_CELL( x, row, column ) ); + winner = 0; + for ( i = 1; i < count; i++ ) { + value = fabs( DLASYF_CELL( x, row+i, column ) ); + if ( value > maximum ) { + maximum = value; + winner = i; + } + } + return winner; +} + +/** +* Performs only the reference NT GEMV mode, alpha=-1 and beta=1. +* +* Each multiplication is rounded before addition, including zero coefficients. +* Logical column then row order is independent of the views' physical strides. +*/ +static void dlasyf_gemv( const intmax_t rows, const intmax_t columns, const dlasyf_view *a, const intmax_t ar, const intmax_t ac, dlasyf_view *w, const intmax_t xr, const intmax_t xc, const intmax_t yr, const intmax_t yc ) { + intmax_t i; + intmax_t j; + double temp; + volatile double product; + + if ( rows <= 0 || columns <= 0 ) return; + for ( j = 0; j < columns; j++ ) { + temp = -DLASYF_CELL( w, xr, xc+j ); + for ( i = 0; i < rows; i++ ) { + product = temp*DLASYF_CELL( a, ar+i, ac+j ); + DLASYF_CELL( w, yr+i, yc ) += product; + } + } +} + +/** +* Performs the required reference NT/T triangular update, alpha=-1, beta=1. +* +* Panel and destination cells within the same injective A view are disjoint. +* Zero block/factor sizes return before forming any panel-derived address. +*/ +static void dlasyf_triangular( const LAPACK_UPLO uplo, const intmax_t order, const intmax_t factors, dlasyf_view *a, const intmax_t cr, const intmax_t cc, const intmax_t ar, const intmax_t ac, const dlasyf_view *w, const intmax_t wr, const intmax_t wc ) { + intmax_t first; + intmax_t last; + intmax_t i; + intmax_t j; + intmax_t l; + double temp; + volatile double product; + + if ( order <= 0 || factors <= 0 ) return; + for ( j = 0; j < order; j++ ) { + first = uplo == LAPACK_UPPER_TRIANGLE ? 0 : j; + last = uplo == LAPACK_UPPER_TRIANGLE ? j : order-1; + for ( l = 0; l < factors; l++ ) { + temp = -DLASYF_CELL( w, wr+j, wc+l ); + for ( i = first; i <= last; i++ ) { + product = temp*DLASYF_CELL( a, ar+i, ac+l ); + DLASYF_CELL( a, cr+i, cc+j ) += product; + } + } + } +} + +#endif // !STDLIB_LAPACK_BASE_DLASYF_PANEL_H diff --git a/lib/node_modules/@stdlib/lapack/base/dlasyf/src/validation.h b/lib/node_modules/@stdlib/lapack/base/dlasyf/src/validation.h new file mode 100644 index 000000000000..88685e25cd46 --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dlasyf/src/validation.h @@ -0,0 +1,255 @@ +/** +* @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_DLASYF_VALIDATION_H +#define STDLIB_LAPACK_BASE_DLASYF_VALIDATION_H + +#include "stdlib/lapack/base/shared.h" +#include "stdlib/lapack/base/xerbla.h" +#include +#include +#include + +typedef char dlasyf_lapack_integer_check[ ( sizeof( LAPACK_INT ) <= sizeof( intmax_t ) && (LAPACK_INT)-1 < 0 ) ? 1 : -1 ]; +typedef char dlasyf_blas_integer_check[ ( sizeof( CBLAS_INT ) <= sizeof( intmax_t ) && (CBLAS_INT)-1 < 0 ) ? 1 : -1 ]; + +typedef struct dlasyf_envelope { + uintptr_t first; + uintptr_t last; +} dlasyf_envelope; + +/** +* Returns the largest configured LAPACK integer. +*/ +static intmax_t dlasyf_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 dlasyf_blas_max( void ) { + return UINTMAX_MAX >> ( (sizeof( uintmax_t )-sizeof( CBLAS_INT ))*CHAR_BIT + 1 ); +} + +/** +* Computes a magnitude without negating a minimum signed integer. +*/ +static uintmax_t dlasyf_magnitude( const intmax_t value ) { + return value < 0 ? (uintmax_t)( -(value+1) )+1 : (uintmax_t)value; +} + +/** +* Computes an exact, checked configured LAPACK integer product. +*/ +static int dlasyf_product( const uintmax_t count, const intmax_t stride, intmax_t *result ) { + const intmax_t limit = dlasyf_lapack_max(); + uintmax_t magnitude; + uintmax_t bound; + + if ( count == 0 || stride == 0 ) { + *result = 0; + return 1; + } + magnitude = dlasyf_magnitude( stride ); + bound = (uintmax_t)limit + ( stride < 0 ? 1 : 0 ); + if ( count > bound/magnitude ) { + return 0; + } + magnitude *= count; + if ( stride < 0 ) { + *result = magnitude == (uintmax_t)limit+1 ? -limit-1 : -(intmax_t)magnitude; + } else { + *result = (intmax_t)magnitude; + } + return 1; +} + +/** +* Computes an exact, checked configured LAPACK integer sum. +*/ +static int dlasyf_sum( const intmax_t x, const intmax_t y, intmax_t *result ) { + const intmax_t limit = dlasyf_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; +} + +/** +* Returns the greatest common divisor of two nonzero magnitudes. +*/ +static uintmax_t dlasyf_gcd( uintmax_t x, uintmax_t y ) { + uintmax_t remainder; + + while ( y != 0 ) { + remainder = x%y; + x = y; + y = remainder; + } + return x; +} + +/** +* Checks an inclusive physical byte envelope without forming derived pointers. +*/ +static int dlasyf_envelope_valid( const void *data, const intmax_t first, const intmax_t last, const size_t size, dlasyf_envelope *envelope ) { + const uintptr_t address = (uintptr_t)data; + uintmax_t last_byte; + uintmax_t first_byte; + + if ( first < 0 || last < first || (uintmax_t)last > ( (uintmax_t)PTRDIFF_MAX-(size-1) )/size ) { + return 0; + } + first_byte = (uintmax_t)first*size; + last_byte = (uintmax_t)last*size+(size-1); + if ( last_byte > UINTPTR_MAX || address > UINTPTR_MAX-(uintptr_t)last_byte ) { + return 0; + } + envelope->first = address+(uintptr_t)first_byte; + envelope->last = address+(uintptr_t)last_byte; + return 1; +} + +/** +* Checks conservative physical byte-envelope overlap. +*/ +static int dlasyf_overlap( const dlasyf_envelope *x, const dlasyf_envelope *y ) { + return x->first <= y->last && y->first <= x->last; +} + +/** +* Validates matrix geometry and reports the offending component (1,2,3). +*/ +static int dlasyf_matrix_valid( const void *data, const intmax_t rows, const intmax_t columns, const intmax_t stride1, const intmax_t stride2, const intmax_t offset, dlasyf_envelope *envelope ) { + uintmax_t magnitude1; + uintmax_t magnitude2; + uintmax_t divisor; + intmax_t delta1; + intmax_t delta2; + intmax_t corner1; + intmax_t corner2; + intmax_t corner3; + intmax_t first; + intmax_t last; + + if ( ( rows > 1 && stride1 == 0 ) || !dlasyf_product( (uintmax_t)(rows-1), stride1, &delta1 ) ) { + return 1; + } + if ( ( columns > 1 && stride2 == 0 ) || !dlasyf_product( (uintmax_t)(columns-1), stride2, &delta2 ) ) { + return 2; + } + if ( rows > 1 && columns > 1 ) { + magnitude1 = dlasyf_magnitude( stride1 ); + magnitude2 = dlasyf_magnitude( stride2 ); + divisor = dlasyf_gcd( magnitude1, magnitude2 ); + if ( magnitude2/divisor < (uintmax_t)rows && magnitude1/divisor < (uintmax_t)columns ) { + return 2; + } + } + if ( !dlasyf_sum( offset, delta1, &corner1 ) || !dlasyf_sum( offset, delta2, &corner2 ) || !dlasyf_sum( corner1, delta2, &corner3 ) ) { + return 3; + } + first = offset; + last = offset; + if ( corner1 < first ) first = corner1; + if ( corner2 < first ) first = corner2; + if ( corner3 < first ) first = corner3; + if ( corner1 > last ) last = corner1; + if ( corner2 > last ) last = corner2; + if ( corner3 > last ) last = corner3; + return dlasyf_envelope_valid( data, first, last, sizeof( double ), envelope ) ? 0 : 3; +} + +/** +* Guards all potential copy/scale/swap casts and C/Fortran poststeps. +* +* Calls are rebased to offset zero. Copy chunks never exceed seven elements; +* this bound also covers Fortran one-based indices, DSCAL's N*abs(stride) +* loop endpoint, and final unrolled loop-control increments. Singleton calls +* normalize the otherwise unused stride to one. +*/ +static int dlasyf_blas_valid( const intmax_t count, const intmax_t stride ) { + const uintmax_t limit = dlasyf_blas_max(); + const uintmax_t length = (uintmax_t)count; + const uintmax_t magnitude = dlasyf_magnitude( stride ); + + if ( count <= 1 ) { + return 1; + } + if ( length > limit || limit-length < 8 || magnitude == 0 || magnitude > limit ) { + return 0; + } + return length <= (limit-1)/magnitude; +} + +/** +* Validates all active views, disjointness and potential helper arithmetic. +*/ +static LAPACK_INT dlasyf_validate( const LAPACK_UPLO uplo, const LAPACK_INT N, const LAPACK_INT NB, const LAPACK_INT *KB, const LAPACK_INT offsetKB, const double *A, const LAPACK_INT strideA1, const LAPACK_INT strideA2, const LAPACK_INT offsetA, const LAPACK_INT *IPIV, const LAPACK_INT strideIPIV, const LAPACK_INT offsetIPIV, const double *W, const LAPACK_INT strideW1, const LAPACK_INT strideW2, const LAPACK_INT offsetW ) { + dlasyf_envelope kb; + dlasyf_envelope a; + dlasyf_envelope p; + dlasyf_envelope w; + intmax_t delta; + intmax_t endpoint; + intmax_t first; + intmax_t last; + int error; + + if ( uplo != LAPACK_UPPER_TRIANGLE && uplo != LAPACK_LOWER_TRIANGLE ) return -1; + if ( N < 0 ) return -2; + if ( NB < 2 ) return -3; + if ( KB == NULL ) return -4; + if ( !dlasyf_envelope_valid( KB, offsetKB, offsetKB, sizeof( LAPACK_INT ), &kb ) ) return -5; + if ( N == 0 ) return 0; + if ( (intmax_t)N > dlasyf_lapack_max()-2 ) return -2; + if ( A == NULL ) return -6; + error = dlasyf_matrix_valid( A, N, N, strideA1, strideA2, offsetA, &a ); + if ( error != 0 ) return (LAPACK_INT)(-6-error); + if ( dlasyf_overlap( &kb, &a ) ) return -6; + if ( IPIV == NULL ) return -10; + if ( ( N > 1 && strideIPIV == 0 ) || !dlasyf_product( (uintmax_t)(N-1), strideIPIV, &delta ) ) return -11; + if ( !dlasyf_sum( offsetIPIV, delta, &endpoint ) ) return -12; + first = offsetIPIV < endpoint ? offsetIPIV : endpoint; + last = offsetIPIV > endpoint ? offsetIPIV : endpoint; + if ( !dlasyf_envelope_valid( IPIV, first, last, sizeof( LAPACK_INT ), &p ) ) return -12; + if ( dlasyf_overlap( &kb, &p ) || dlasyf_overlap( &a, &p ) ) return -10; + if ( W == NULL ) return -13; + error = dlasyf_matrix_valid( W, N, NB, strideW1, strideW2, offsetW, &w ); + if ( error != 0 ) return (LAPACK_INT)(-13-error); + if ( dlasyf_overlap( &kb, &w ) || dlasyf_overlap( &a, &w ) || dlasyf_overlap( &p, &w ) ) return -13; + if ( !dlasyf_blas_valid( N, strideA1 ) ) return -7; + if ( !dlasyf_blas_valid( N, strideA2 ) ) return -8; + if ( !dlasyf_blas_valid( N, strideW1 ) ) return -14; + if ( !dlasyf_blas_valid( N, strideW2 ) ) return -15; + return 0; +} + +/** +* Prints an adopted LAPACK diagnostic and returns this routine's error status. +*/ +static LAPACK_INT dlasyf_error( const char *name, const LAPACK_INT info ) { + API_SUFFIX(lapack_xerbla)( name, info ); + return info; +} + +#endif // !STDLIB_LAPACK_BASE_DLASYF_VALIDATION_H diff --git a/lib/node_modules/@stdlib/lapack/base/dlasyf/test/common.js b/lib/node_modules/@stdlib/lapack/base/dlasyf/test/common.js new file mode 100644 index 000000000000..896bc3726521 --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dlasyf/test/common.js @@ -0,0 +1,300 @@ +/** +* @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 max = require( '@stdlib/math/base/special/max' ); +var min = require( '@stdlib/math/base/special/min' ); +var Float64Array = require( '@stdlib/array/float64' ); +var Int32Array = require( '@stdlib/array/int32' ); +var DataView = require( '@stdlib/array/dataview' ); +var littleEndian = require( '@stdlib/assert/is-little-endian' ); +var fixtures = require( './fixtures/lapack.json' ).fixtures; + +/** +* Reads a float64 element as an exact hexadecimal bit string. +* @param {*} x - argument +* @param {*} i - argument +* @returns {string} result +*/ +function bits(x, i) { + var d; + var a; + var b; + d = new DataView(x.buffer, x.byteOffset, x.byteLength); + a = d.getUint32(((i * 8) + (( littleEndian ) ? 4 : 0)), littleEndian).toString(16); + b = d.getUint32(((i * 8) + (( littleEndian ) ? 0 : 4)), littleEndian).toString(16); + while ((a.length < 8)) { + a = ('0' + a); + } + while ((b.length < 8)) { + b = ('0' + b); + } + return (a + b); +} +/** +* Stores an exact bit string without canonicalizing a NaN marker. +* @param {*} x - argument +* @param {*} i - argument +* @param {*} s - argument +*/ +function setBits(x, i, s) { + var d; + d = new DataView(x.buffer, x.byteOffset, x.byteLength); + d.setUint32(((i * 8) + (( littleEndian ) ? 4 : 0)), parseInt(s.slice(0, 8), 16), littleEndian); + d.setUint32(((i * 8) + (( littleEndian ) ? 0 : 4)), parseInt(s.slice(8), 16), littleEndian); +} +/** +* Creates an injective signed rectangular view and byte-offset guards. +* @param {*} rows - argument +* @param {*} cols - argument +* @param {*} r - argument +* @param {*} c - argument +* @throws {RangeError} invalid argument +* @throws {TypeError} invalid argument +* @returns {Object} result +*/ +function view(rows, cols, r, c) { + var whole; + var high; + var data; + var low; + var i; + low = (min(0, (((rows - 1)) * r)) + min(0, (((cols - 1)) * c))); + high = (max(0, (((rows - 1)) * r)) + max(0, (((cols - 1)) * c))); + whole = new Float64Array(((high - low) + 11)); + for (i = 0; (i < whole.length); i++) { + whole[i] = -1234567; + } + data = new Float64Array(whole.buffer, 16, (whole.length - 4)); + return { + 'data': data, + 'whole': whole, + 'r': r, + 'c': c, + 'offset': (3 - low) + }; +} +/** +* Snapshots every element, including typed-array byte-offset guards. +* @param {*} x - argument +* @returns {Array} result +*/ +function snapshot(x) { + var result; + var i; + result = []; + for (i = 0; (i < x.length); i++) { + result.push(bits(x, i)); + } + return result; +} +/** +* Checks one actual numerical case against unmodified reference bits. +* @param {*} t - argument +* @param {*} fn - argument +* @param {*} f - argument +* @param {*} a - argument +* @param {*} w - argument +* @param {*} main - argument +* @param {*} column - argument +*/ +function one(t, fn, f, a, w, main, column) { + var expectedA; + var expectedW; + var expectedP; + var expectedK; + var info; + var idx; + var p; + var k; + var o; + var s; + var u; + var i; + var j; + u = ( f.lower ) ? 'lower' : 'upper'; + for (i = 0; (i < f.n); i++) { + for (j = 0; (j < f.n); j++) { + idx = ((a.offset + (i * a.r)) + (j * a.c)); + setBits(a.data, idx, ( ((f.lower && (i >= j)) || (!f.lower && (i <= j))) ) ? f.input[((i * f.n) + j)] : '7ff0000000000000'); + } + for (j = 0; (j < f.nb); j++) { + setBits(w.data, ((w.offset + (i * w.r)) + (j * w.c)), '7ff8000000000abc'); + } + } + expectedA = snapshot(a.whole); + expectedW = snapshot(w.whole); + for (i = 0; (i < f.n); i++) { + for (j = 0; (j < f.n); j++) { + if (((f.lower && (i >= j)) || (!f.lower && (i <= j)))) { + expectedA[(((2 + a.offset) + (i * a.r)) + (j * a.c))] = f.a[((i * f.n) + j)]; + } + } + for (j = 0; (j < f.nb); j++) { + expectedW[(((2 + w.offset) + (i * w.r)) + (j * w.c))] = f.w[((i * f.nb) + j)]; + } + } + p = new Int32Array(((2 * f.n) + 9)); + for (i = 0; (i < p.length); i++) { + p[i] = -987654; + } + s = ( column ) ? -2 : 2; + o = ( (s < 0) ) ? (3 + (2 * ((f.n - 1)))) : 3; + k = new Int32Array([ + -91, + -92, + -93, + -94, + -95 + ]); + expectedP = Array.prototype.slice.call(p); + expectedK = Array.prototype.slice.call(k); + for (i = 0; (i < f.n); i++) { + expectedP[(o + (i * s))] = f.pivots[i]; + } + expectedK[2] = f.kb; + if (main) { + // Main has zero element offsets: selected buffers retain leading-dimension padding. + info = fn(( column ) ? 'column-major' : 'row-major', u, f.n, f.nb, k.subarray(2), a.data.subarray(a.offset), ( column ) ? a.c : a.r, p.subarray(o), w.data.subarray(w.offset), ( column ) ? w.c : w.r); + for (i = 0; (i < p.length); i++) { + expectedP[i] = -987654; + } + for (i = 0; (i < f.n); i++) { + expectedP[(o + i)] = f.pivots[i]; + } + } else { + info = fn.ndarray(u, f.n, f.nb, k, 2, a.data, a.r, a.c, a.offset, p, s, o, w.data, w.r, w.c, w.offset); + } + t.strictEqual(info, f.info, (f.name + ': INFO')); + t.deepEqual(Array.prototype.slice.call(k), expectedK, 'KB and scalar guards'); + t.deepEqual(Array.prototype.slice.call(p), expectedP, 'only produced signed pivot slots and guards'); + t.deepEqual(snapshot(a.whole), expectedA, 'selected factor bits and ignored triangle/padding/byte guards'); + t.deepEqual(snapshot(w.whole), expectedW, 'scratch bits and untouched cells/padding/byte guards'); +} +/** +* Runs independent matrix and workspace layouts, not shared inferred geometry. +* @param {*} t - argument +* @param {*} fn - argument +*/ +function corpus(t, fn) { + var layouts; + var f; + var n; + var b; + var z; + var i; + var j; + for (i = 0; (i < fixtures.length); i++) { + f = fixtures[i]; + n = f.n; + b = f.nb; + layouts = [ + [ + 1, + (n + 2), + 2, + ((2 * n) + 3) + ], + [ + -1, + (n + 3), + 1, + -((n + 4)) + ], + [ + 2, + -(((2 * n) + 1)), + -((b + 3)), + 1 + ], + [ + -((n + 2)), + 1, + (b + 2), + -1 + ], + [ + (n + 4), + -1, + 1, + (n + 5) + ], + [ + 1, + -((n + 3)), + -((b + 2)), + -1 + ] + ]; + for (j = 0; (j < layouts.length); j++) { + z = layouts[j]; + one(t, fn, f, view(n, n, z[0], z[1]), view(n, b, z[2], z[3]), false, ((j % 2) === 0)); + } + one(t, fn, f, view(n, n, 1, (n + 2)), view(n, b, 1, (n + 3)), true, true); + one(t, fn, f, view(n, n, (n + 2), 1), view(n, b, (b + 3), 1), true, false); + } +} +/** +* Checks larger mathematical diagonal cases crossing portable DCOPY unroll blocks. +* @param {*} t - argument +* @param {*} fn - argument +*/ +function diagonal(t, fn) { + var lower; + var info; + var kb; + var n; + var b; + var a; + var w; + var p; + var k; + var i; + var j; + var z; + for (z = 0; (z < 2); z++) { + n = ( (z === 0) ) ? 14 : 21; + for (b = 2; (b <= n); b += (n - 2)) { + for (lower = 0; (lower < 2); lower++) { + a = new Float64Array((n * n)); + w = new Float64Array((n * b)); + p = new Int32Array(n); + k = new Int32Array(1); + for (i = 0; (i < n); i++) { + a[(i + (n * i))] = (i + 1); + p[i] = -123; + } + info = fn('column-major', ( lower ) ? 'lower' : 'upper', n, b, k, a, n, p, w, n); + kb = ( (b >= n) ) ? n : (b - 1); + t.strictEqual(info, 0, 'positive diagonal has nonsingular INFO'); + t.strictEqual(k[0], kb, 'mathematical panel extent'); + for (i = 0; (i < n); i++) { + t.strictEqual(p[i], ( ((lower && (i < kb)) || (!lower && (i >= (n - kb)))) ) ? (i + 1) : -123, 'identity permutation only in produced panel'); + for (j = 0; (j < n); j++) { + t.strictEqual(a[(i + (n * j))], ( (i === j) ) ? (i + 1) : 0, 'unit triangular factor times diagonal reconstructs original matrix'); + } + } + } + } + } +} +module.exports = { + 'corpus': corpus, + 'diagonal': diagonal, + 'snapshot': snapshot +}; diff --git a/lib/node_modules/@stdlib/lapack/base/dlasyf/test/fixtures/lapack.json b/lib/node_modules/@stdlib/lapack/base/dlasyf/test/fixtures/lapack.json new file mode 100644 index 000000000000..6baf7789ba7a --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dlasyf/test/fixtures/lapack.json @@ -0,0 +1,6276 @@ +{ + "reference": "Reference-LAPACK/lapack@2e5d9c1273435fbd953adb294ed603e4789afaba", + "routine": "SRC/dlasyf.f", + "oracle_sha256": "ea08df6f67fa7ec694c35df0e5fa31412a2587449e8440f88a037b87ed3995ae", + "generation": "Unmodified LP64 O0 reference, checked against LP64/ILP64 O0/O3 with selected-triangle and scratch bit equality, partial reconstruction and separate SciPy full-factor checks. Empty calls deliberately excluded.", + "fixtures": [ + { + "name": "scalar-positive-2-U", + "n": 1, + "nb": 2, + "lower": false, + "input": [ + "4008000000000000" + ], + "a": [ + "4008000000000000" + ], + "w": [ + "7ff8000000000abc", + "4008000000000000" + ], + "pivots": [ + 1 + ], + "kb": 1, + "info": 0 + }, + { + "name": "scalar-positive-2-L", + "n": 1, + "nb": 2, + "lower": true, + "input": [ + "4008000000000000" + ], + "a": [ + "4008000000000000" + ], + "w": [ + "4008000000000000", + "7ff8000000000abc" + ], + "pivots": [ + 1 + ], + "kb": 1, + "info": 0 + }, + { + "name": "scalar-negative-2-U", + "n": 1, + "nb": 2, + "lower": false, + "input": [ + "c008000000000000" + ], + "a": [ + "c008000000000000" + ], + "w": [ + "7ff8000000000abc", + "c008000000000000" + ], + "pivots": [ + 1 + ], + "kb": 1, + "info": 0 + }, + { + "name": "scalar-negative-2-L", + "n": 1, + "nb": 2, + "lower": true, + "input": [ + "c008000000000000" + ], + "a": [ + "c008000000000000" + ], + "w": [ + "c008000000000000", + "7ff8000000000abc" + ], + "pivots": [ + 1 + ], + "kb": 1, + "info": 0 + }, + { + "name": "scalar-zero-2-U", + "n": 1, + "nb": 2, + "lower": false, + "input": [ + "0000000000000000" + ], + "a": [ + "0000000000000000" + ], + "w": [ + "7ff8000000000abc", + "0000000000000000" + ], + "pivots": [ + 1 + ], + "kb": 1, + "info": 1 + }, + { + "name": "scalar-zero-2-L", + "n": 1, + "nb": 2, + "lower": true, + "input": [ + "0000000000000000" + ], + "a": [ + "0000000000000000" + ], + "w": [ + "0000000000000000", + "7ff8000000000abc" + ], + "pivots": [ + 1 + ], + "kb": 1, + "info": 1 + }, + { + "name": "scalar-negative-zero-2-U", + "n": 1, + "nb": 2, + "lower": false, + "input": [ + "8000000000000000" + ], + "a": [ + "8000000000000000" + ], + "w": [ + "7ff8000000000abc", + "8000000000000000" + ], + "pivots": [ + 1 + ], + "kb": 1, + "info": 1 + }, + { + "name": "scalar-negative-zero-2-L", + "n": 1, + "nb": 2, + "lower": true, + "input": [ + "8000000000000000" + ], + "a": [ + "8000000000000000" + ], + "w": [ + "8000000000000000", + "7ff8000000000abc" + ], + "pivots": [ + 1 + ], + "kb": 1, + "info": 1 + }, + { + "name": "offdiagonal-two-pivot-2-U", + "n": 2, + "nb": 2, + "lower": false, + "input": [ + "0000000000000000", + "4010000000000000", + "4010000000000000", + "0000000000000000" + ], + "a": [ + "0000000000000000", + "4010000000000000", + "7ff8000000000abc", + "0000000000000000" + ], + "w": [ + "0000000000000000", + "4010000000000000", + "4010000000000000", + "0000000000000000" + ], + "pivots": [ + -1, + -1 + ], + "kb": 2, + "info": 0 + }, + { + "name": "offdiagonal-two-pivot-2-L", + "n": 2, + "nb": 2, + "lower": true, + "input": [ + "0000000000000000", + "4010000000000000", + "4010000000000000", + "0000000000000000" + ], + "a": [ + "0000000000000000", + "7ff8000000000abc", + "4010000000000000", + "0000000000000000" + ], + "w": [ + "0000000000000000", + "4010000000000000", + "4010000000000000", + "0000000000000000" + ], + "pivots": [ + -2, + -2 + ], + "kb": 2, + "info": 0 + }, + { + "name": "offdiagonal-two-pivot-3-U", + "n": 2, + "nb": 3, + "lower": false, + "input": [ + "0000000000000000", + "4010000000000000", + "4010000000000000", + "0000000000000000" + ], + "a": [ + "0000000000000000", + "4010000000000000", + "7ff8000000000abc", + "0000000000000000" + ], + "w": [ + "7ff8000000000abc", + "0000000000000000", + "4010000000000000", + "7ff8000000000abc", + "4010000000000000", + "0000000000000000" + ], + "pivots": [ + -1, + -1 + ], + "kb": 2, + "info": 0 + }, + { + "name": "offdiagonal-two-pivot-3-L", + "n": 2, + "nb": 3, + "lower": true, + "input": [ + "0000000000000000", + "4010000000000000", + "4010000000000000", + "0000000000000000" + ], + "a": [ + "0000000000000000", + "7ff8000000000abc", + "4010000000000000", + "0000000000000000" + ], + "w": [ + "0000000000000000", + "4010000000000000", + "7ff8000000000abc", + "4010000000000000", + "0000000000000000", + "7ff8000000000abc" + ], + "pivots": [ + -2, + -2 + ], + "kb": 2, + "info": 0 + }, + { + "name": "diagonal-positive-2-U", + "n": 6, + "nb": 2, + "lower": false, + "input": [ + "3ff0000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4008000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4010000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4014000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4018000000000000" + ], + "a": [ + "3ff0000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "4000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "4008000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "4010000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "4014000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "4018000000000000" + ], + "w": [ + "7ff8000000000abc", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "7ff8000000000abc", + "4018000000000000" + ], + "pivots": [ + -987654, + -987654, + -987654, + -987654, + -987654, + 6 + ], + "kb": 1, + "info": 0 + }, + { + "name": "diagonal-positive-2-L", + "n": 6, + "nb": 2, + "lower": true, + "input": [ + "3ff0000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4008000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4010000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4014000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4018000000000000" + ], + "a": [ + "3ff0000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "4000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "4008000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4010000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4014000000000000", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4018000000000000" + ], + "w": [ + "3ff0000000000000", + "7ff8000000000abc", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "7ff8000000000abc" + ], + "pivots": [ + 1, + -987654, + -987654, + -987654, + -987654, + -987654 + ], + "kb": 1, + "info": 0 + }, + { + "name": "diagonal-positive-3-U", + "n": 6, + "nb": 3, + "lower": false, + "input": [ + "3ff0000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4008000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4010000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4014000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4018000000000000" + ], + "a": [ + "3ff0000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "4000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "4008000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "4010000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "4014000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "4018000000000000" + ], + "w": [ + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "4014000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "4018000000000000" + ], + "pivots": [ + -987654, + -987654, + -987654, + -987654, + 5, + 6 + ], + "kb": 2, + "info": 0 + }, + { + "name": "diagonal-positive-3-L", + "n": 6, + "nb": 3, + "lower": true, + "input": [ + "3ff0000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4008000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4010000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4014000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4018000000000000" + ], + "a": [ + "3ff0000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "4000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "4008000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4010000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4014000000000000", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4018000000000000" + ], + "w": [ + "3ff0000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "4000000000000000", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc" + ], + "pivots": [ + 1, + 2, + -987654, + -987654, + -987654, + -987654 + ], + "kb": 2, + "info": 0 + }, + { + "name": "diagonal-positive-4-U", + "n": 6, + "nb": 4, + "lower": false, + "input": [ + "3ff0000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4008000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4010000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4014000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4018000000000000" + ], + "a": [ + "3ff0000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "4000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "4008000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "4010000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "4014000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "4018000000000000" + ], + "w": [ + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "4010000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "4014000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "4018000000000000" + ], + "pivots": [ + -987654, + -987654, + -987654, + 4, + 5, + 6 + ], + "kb": 3, + "info": 0 + }, + { + "name": "diagonal-positive-4-L", + "n": 6, + "nb": 4, + "lower": true, + "input": [ + "3ff0000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4008000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4010000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4014000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4018000000000000" + ], + "a": [ + "3ff0000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "4000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "4008000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4010000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4014000000000000", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4018000000000000" + ], + "w": [ + "3ff0000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "4000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "4008000000000000", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc" + ], + "pivots": [ + 1, + 2, + 3, + -987654, + -987654, + -987654 + ], + "kb": 3, + "info": 0 + }, + { + "name": "diagonal-positive-6-U", + "n": 6, + "nb": 6, + "lower": false, + "input": [ + "3ff0000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4008000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4010000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4014000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4018000000000000" + ], + "a": [ + "3ff0000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "4000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "4008000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "4010000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "4014000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "4018000000000000" + ], + "w": [ + "3ff0000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "4000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "4008000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "4010000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "4014000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "4018000000000000" + ], + "pivots": [ + 1, + 2, + 3, + 4, + 5, + 6 + ], + "kb": 6, + "info": 0 + }, + { + "name": "diagonal-positive-6-L", + "n": 6, + "nb": 6, + "lower": true, + "input": [ + "3ff0000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4008000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4010000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4014000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4018000000000000" + ], + "a": [ + "3ff0000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "4000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "4008000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4010000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4014000000000000", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4018000000000000" + ], + "w": [ + "3ff0000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "4000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "4008000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4010000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4014000000000000", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4018000000000000" + ], + "pivots": [ + 1, + 2, + 3, + 4, + 5, + 6 + ], + "kb": 6, + "info": 0 + }, + { + "name": "diagonal-singular-2-U", + "n": 6, + "nb": 2, + "lower": false, + "input": [ + "4010000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "c008000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "bff0000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4018000000000000" + ], + "a": [ + "4010000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "c008000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "4000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "bff0000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "4018000000000000" + ], + "w": [ + "7ff8000000000abc", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "7ff8000000000abc", + "4018000000000000" + ], + "pivots": [ + -987654, + -987654, + -987654, + -987654, + -987654, + 6 + ], + "kb": 1, + "info": 0 + }, + { + "name": "diagonal-singular-2-L", + "n": 6, + "nb": 2, + "lower": true, + "input": [ + "4010000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "c008000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "bff0000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4018000000000000" + ], + "a": [ + "4010000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "c008000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "4000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "bff0000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4018000000000000" + ], + "w": [ + "4010000000000000", + "7ff8000000000abc", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "7ff8000000000abc" + ], + "pivots": [ + 1, + -987654, + -987654, + -987654, + -987654, + -987654 + ], + "kb": 1, + "info": 0 + }, + { + "name": "diagonal-singular-3-U", + "n": 6, + "nb": 3, + "lower": false, + "input": [ + "4010000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "c008000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "bff0000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4018000000000000" + ], + "a": [ + "4010000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "c008000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "4000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "bff0000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "4018000000000000" + ], + "w": [ + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "4018000000000000" + ], + "pivots": [ + -987654, + -987654, + -987654, + -987654, + 5, + 6 + ], + "kb": 2, + "info": 5 + }, + { + "name": "diagonal-singular-3-L", + "n": 6, + "nb": 3, + "lower": true, + "input": [ + "4010000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "c008000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "bff0000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4018000000000000" + ], + "a": [ + "4010000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "c008000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "8000000000000000", + "4000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "8000000000000000", + "0000000000000000", + "bff0000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "8000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "8000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4018000000000000" + ], + "w": [ + "4010000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "c008000000000000", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc" + ], + "pivots": [ + 1, + 2, + -987654, + -987654, + -987654, + -987654 + ], + "kb": 2, + "info": 0 + }, + { + "name": "diagonal-singular-6-U", + "n": 6, + "nb": 6, + "lower": false, + "input": [ + "4010000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "c008000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "bff0000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4018000000000000" + ], + "a": [ + "4010000000000000", + "8000000000000000", + "0000000000000000", + "8000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "c008000000000000", + "0000000000000000", + "8000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "4000000000000000", + "8000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "bff0000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "4018000000000000" + ], + "w": [ + "4010000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "c008000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "4000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "bff0000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "4018000000000000" + ], + "pivots": [ + 1, + 2, + 3, + 4, + 5, + 6 + ], + "kb": 6, + "info": 5 + }, + { + "name": "diagonal-singular-6-L", + "n": 6, + "nb": 6, + "lower": true, + "input": [ + "4010000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "c008000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "bff0000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4018000000000000" + ], + "a": [ + "4010000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "c008000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "8000000000000000", + "4000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "8000000000000000", + "0000000000000000", + "bff0000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "8000000000000000", + "0000000000000000", + "8000000000000000", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "8000000000000000", + "0000000000000000", + "8000000000000000", + "0000000000000000", + "4018000000000000" + ], + "w": [ + "4010000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "c008000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "4000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "bff0000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4018000000000000" + ], + "pivots": [ + 1, + 2, + 3, + 4, + 5, + 6 + ], + "kb": 6, + "info": 5 + }, + { + "name": "zero-four-2-U", + "n": 4, + "nb": 2, + "lower": false, + "input": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "a": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000" + ], + "w": [ + "7ff8000000000abc", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000" + ], + "pivots": [ + -987654, + -987654, + -987654, + 4 + ], + "kb": 1, + "info": 4 + }, + { + "name": "zero-four-2-L", + "n": 4, + "nb": 2, + "lower": true, + "input": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "a": [ + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "w": [ + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "7ff8000000000abc" + ], + "pivots": [ + 1, + -987654, + -987654, + -987654 + ], + "kb": 1, + "info": 1 + }, + { + "name": "zero-four-4-U", + "n": 4, + "nb": 4, + "lower": false, + "input": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "a": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000" + ], + "w": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000" + ], + "pivots": [ + 1, + 2, + 3, + 4 + ], + "kb": 4, + "info": 4 + }, + { + "name": "zero-four-4-L", + "n": 4, + "nb": 4, + "lower": true, + "input": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "a": [ + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "w": [ + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "pivots": [ + 1, + 2, + 3, + 4 + ], + "kb": 4, + "info": 1 + }, + { + "name": "mixed-one-two-pivots-2-U", + "n": 6, + "nb": 2, + "lower": false, + "input": [ + "0000000000000000", + "4014000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4014000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4008000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "c000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "401c000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "401c000000000000", + "0000000000000000" + ], + "a": [ + "0000000000000000", + "4014000000000000", + "0000000000000000", + "0000000000000000", + "8000000000000000", + "8000000000000000", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "8000000000000000", + "8000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "4008000000000000", + "0000000000000000", + "8000000000000000", + "8000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "c000000000000000", + "8000000000000000", + "8000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "401c000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000" + ], + "w": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "401c000000000000", + "401c000000000000", + "0000000000000000" + ], + "pivots": [ + -987654, + -987654, + -987654, + -987654, + -5, + -5 + ], + "kb": 2, + "info": 0 + }, + { + "name": "mixed-one-two-pivots-2-L", + "n": 6, + "nb": 2, + "lower": true, + "input": [ + "0000000000000000", + "4014000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4014000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4008000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "c000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "401c000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "401c000000000000", + "0000000000000000" + ], + "a": [ + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "4014000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "8000000000000000", + "8000000000000000", + "4008000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "8000000000000000", + "8000000000000000", + "0000000000000000", + "c000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "8000000000000000", + "8000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "8000000000000000", + "8000000000000000", + "0000000000000000", + "0000000000000000", + "401c000000000000", + "0000000000000000" + ], + "w": [ + "0000000000000000", + "4014000000000000", + "4014000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "pivots": [ + -2, + -2, + -987654, + -987654, + -987654, + -987654 + ], + "kb": 2, + "info": 0 + }, + { + "name": "mixed-one-two-pivots-3-U", + "n": 6, + "nb": 3, + "lower": false, + "input": [ + "0000000000000000", + "4014000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4014000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4008000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "c000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "401c000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "401c000000000000", + "0000000000000000" + ], + "a": [ + "0000000000000000", + "4014000000000000", + "0000000000000000", + "0000000000000000", + "8000000000000000", + "8000000000000000", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "8000000000000000", + "8000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "4008000000000000", + "0000000000000000", + "8000000000000000", + "8000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "c000000000000000", + "8000000000000000", + "8000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "401c000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000" + ], + "w": [ + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "401c000000000000", + "7ff8000000000abc", + "401c000000000000", + "0000000000000000" + ], + "pivots": [ + -987654, + -987654, + -987654, + -987654, + -5, + -5 + ], + "kb": 2, + "info": 0 + }, + { + "name": "mixed-one-two-pivots-3-L", + "n": 6, + "nb": 3, + "lower": true, + "input": [ + "0000000000000000", + "4014000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4014000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4008000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "c000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "401c000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "401c000000000000", + "0000000000000000" + ], + "a": [ + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "4014000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "8000000000000000", + "8000000000000000", + "4008000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "8000000000000000", + "8000000000000000", + "0000000000000000", + "c000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "8000000000000000", + "8000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "8000000000000000", + "8000000000000000", + "0000000000000000", + "0000000000000000", + "401c000000000000", + "0000000000000000" + ], + "w": [ + "0000000000000000", + "4014000000000000", + "7ff8000000000abc", + "4014000000000000", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc" + ], + "pivots": [ + -2, + -2, + -987654, + -987654, + -987654, + -987654 + ], + "kb": 2, + "info": 0 + }, + { + "name": "mixed-one-two-pivots-4-U", + "n": 6, + "nb": 4, + "lower": false, + "input": [ + "0000000000000000", + "4014000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4014000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4008000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "c000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "401c000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "401c000000000000", + "0000000000000000" + ], + "a": [ + "0000000000000000", + "4014000000000000", + "0000000000000000", + "8000000000000000", + "8000000000000000", + "8000000000000000", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "8000000000000000", + "8000000000000000", + "8000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "4008000000000000", + "8000000000000000", + "8000000000000000", + "8000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "c000000000000000", + "8000000000000000", + "8000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "401c000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000" + ], + "w": [ + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "c000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "401c000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "401c000000000000", + "0000000000000000" + ], + "pivots": [ + -987654, + -987654, + -987654, + 4, + -5, + -5 + ], + "kb": 3, + "info": 0 + }, + { + "name": "mixed-one-two-pivots-4-L", + "n": 6, + "nb": 4, + "lower": true, + "input": [ + "0000000000000000", + "4014000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4014000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4008000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "c000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "401c000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "401c000000000000", + "0000000000000000" + ], + "a": [ + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "4014000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "8000000000000000", + "8000000000000000", + "4008000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "8000000000000000", + "8000000000000000", + "0000000000000000", + "c000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "8000000000000000", + "8000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "8000000000000000", + "8000000000000000", + "0000000000000000", + "0000000000000000", + "401c000000000000", + "0000000000000000" + ], + "w": [ + "0000000000000000", + "4014000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "4014000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "4008000000000000", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc" + ], + "pivots": [ + -2, + -2, + 3, + -987654, + -987654, + -987654 + ], + "kb": 3, + "info": 0 + }, + { + "name": "mixed-one-two-pivots-6-U", + "n": 6, + "nb": 6, + "lower": false, + "input": [ + "0000000000000000", + "4014000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4014000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4008000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "c000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "401c000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "401c000000000000", + "0000000000000000" + ], + "a": [ + "0000000000000000", + "4014000000000000", + "0000000000000000", + "8000000000000000", + "8000000000000000", + "8000000000000000", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "8000000000000000", + "8000000000000000", + "8000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "4008000000000000", + "8000000000000000", + "8000000000000000", + "8000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "c000000000000000", + "8000000000000000", + "8000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "401c000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000" + ], + "w": [ + "0000000000000000", + "4014000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4014000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "4008000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "c000000000000000", + "0000000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "401c000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "401c000000000000", + "0000000000000000" + ], + "pivots": [ + -1, + -1, + 3, + 4, + -5, + -5 + ], + "kb": 6, + "info": 0 + }, + { + "name": "mixed-one-two-pivots-6-L", + "n": 6, + "nb": 6, + "lower": true, + "input": [ + "0000000000000000", + "4014000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4014000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4008000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "c000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "401c000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "401c000000000000", + "0000000000000000" + ], + "a": [ + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "4014000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "8000000000000000", + "8000000000000000", + "4008000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "8000000000000000", + "8000000000000000", + "0000000000000000", + "c000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "8000000000000000", + "8000000000000000", + "0000000000000000", + "8000000000000000", + "0000000000000000", + "7ff8000000000abc", + "8000000000000000", + "8000000000000000", + "0000000000000000", + "8000000000000000", + "401c000000000000", + "0000000000000000" + ], + "w": [ + "0000000000000000", + "4014000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "4014000000000000", + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "4008000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "c000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "401c000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "401c000000000000", + "0000000000000000" + ], + "pivots": [ + -2, + -2, + 3, + 4, + -6, + -6 + ], + "kb": 6, + "info": 0 + }, + { + "name": "tied-offdiagonal-maxima-2-U", + "n": 4, + "nb": 2, + "lower": false, + "input": [ + "0000000000000000", + "4000000000000000", + "4000000000000000", + "0000000000000000", + "4000000000000000", + "3fb999999999999a", + "0000000000000000", + "3ff0000000000000", + "4000000000000000", + "0000000000000000", + "3fc999999999999a", + "bff0000000000000", + "0000000000000000", + "3ff0000000000000", + "bff0000000000000", + "0000000000000000" + ], + "a": [ + "0000000000000000", + "4010000000000000", + "8000000000000000", + "4000000000000000", + "7ff8000000000abc", + "3fd3333333333334", + "bff0000000000000", + "3fb999999999999a", + "7ff8000000000abc", + "7ff8000000000abc", + "3fb999999999999a", + "3ff0000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000" + ], + "w": [ + "4000000000000000", + "0000000000000000", + "0000000000000000", + "bff0000000000000", + "3fb999999999999a", + "3ff0000000000000", + "3ff0000000000000", + "0000000000000000" + ], + "pivots": [ + -987654, + -987654, + -2, + -2 + ], + "kb": 2, + "info": 0 + }, + { + "name": "tied-offdiagonal-maxima-2-L", + "n": 4, + "nb": 2, + "lower": true, + "input": [ + "0000000000000000", + "4000000000000000", + "4000000000000000", + "0000000000000000", + "4000000000000000", + "3fb999999999999a", + "0000000000000000", + "3ff0000000000000", + "4000000000000000", + "0000000000000000", + "3fc999999999999a", + "bff0000000000000", + "0000000000000000", + "3ff0000000000000", + "bff0000000000000", + "0000000000000000" + ], + "a": [ + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "4000000000000000", + "3fb999999999999a", + "7ff8000000000abc", + "7ff8000000000abc", + "bfa999999999999a", + "3ff0000000000000", + "3fd3333333333334", + "7ff8000000000abc", + "3fe0000000000000", + "8000000000000000", + "c000000000000000", + "0000000000000000" + ], + "w": [ + "0000000000000000", + "4000000000000000", + "4000000000000000", + "3fb999999999999a", + "4000000000000000", + "0000000000000000", + "0000000000000000", + "3ff0000000000000" + ], + "pivots": [ + -2, + -2, + -987654, + -987654 + ], + "kb": 2, + "info": 0 + }, + { + "name": "tied-offdiagonal-maxima-3-U", + "n": 4, + "nb": 3, + "lower": false, + "input": [ + "0000000000000000", + "4000000000000000", + "4000000000000000", + "0000000000000000", + "4000000000000000", + "3fb999999999999a", + "0000000000000000", + "3ff0000000000000", + "4000000000000000", + "0000000000000000", + "3fc999999999999a", + "bff0000000000000", + "0000000000000000", + "3ff0000000000000", + "bff0000000000000", + "0000000000000000" + ], + "a": [ + "0000000000000000", + "4010000000000000", + "8000000000000000", + "4000000000000000", + "7ff8000000000abc", + "3fd3333333333334", + "bff0000000000000", + "3fb999999999999a", + "7ff8000000000abc", + "7ff8000000000abc", + "3fb999999999999a", + "3ff0000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000" + ], + "w": [ + "7ff8000000000abc", + "4000000000000000", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "bff0000000000000", + "7ff8000000000abc", + "3fb999999999999a", + "3ff0000000000000", + "7ff8000000000abc", + "3ff0000000000000", + "0000000000000000" + ], + "pivots": [ + -987654, + -987654, + -2, + -2 + ], + "kb": 2, + "info": 0 + }, + { + "name": "tied-offdiagonal-maxima-3-L", + "n": 4, + "nb": 3, + "lower": true, + "input": [ + "0000000000000000", + "4000000000000000", + "4000000000000000", + "0000000000000000", + "4000000000000000", + "3fb999999999999a", + "0000000000000000", + "3ff0000000000000", + "4000000000000000", + "0000000000000000", + "3fc999999999999a", + "bff0000000000000", + "0000000000000000", + "3ff0000000000000", + "bff0000000000000", + "0000000000000000" + ], + "a": [ + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "4000000000000000", + "3fb999999999999a", + "7ff8000000000abc", + "7ff8000000000abc", + "bfa999999999999a", + "3ff0000000000000", + "3fd3333333333334", + "7ff8000000000abc", + "3fe0000000000000", + "8000000000000000", + "c000000000000000", + "0000000000000000" + ], + "w": [ + "0000000000000000", + "4000000000000000", + "7ff8000000000abc", + "4000000000000000", + "3fb999999999999a", + "7ff8000000000abc", + "4000000000000000", + "0000000000000000", + "7ff8000000000abc", + "0000000000000000", + "3ff0000000000000", + "7ff8000000000abc" + ], + "pivots": [ + -2, + -2, + -987654, + -987654 + ], + "kb": 2, + "info": 0 + }, + { + "name": "tied-offdiagonal-maxima-4-U", + "n": 4, + "nb": 4, + "lower": false, + "input": [ + "0000000000000000", + "4000000000000000", + "4000000000000000", + "0000000000000000", + "4000000000000000", + "3fb999999999999a", + "0000000000000000", + "3ff0000000000000", + "4000000000000000", + "0000000000000000", + "3fc999999999999a", + "bff0000000000000", + "0000000000000000", + "3ff0000000000000", + "bff0000000000000", + "0000000000000000" + ], + "a": [ + "0000000000000000", + "4010000000000000", + "8000000000000000", + "4000000000000000", + "7ff8000000000abc", + "3fd3333333333334", + "bff0000000000000", + "3fb999999999999a", + "7ff8000000000abc", + "7ff8000000000abc", + "3fb999999999999a", + "3ff0000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "0000000000000000" + ], + "w": [ + "0000000000000000", + "4010000000000000", + "4000000000000000", + "0000000000000000", + "4010000000000000", + "3fd3333333333334", + "0000000000000000", + "bff0000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "3fb999999999999a", + "3ff0000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "3ff0000000000000", + "0000000000000000" + ], + "pivots": [ + -1, + -1, + -2, + -2 + ], + "kb": 4, + "info": 0 + }, + { + "name": "tied-offdiagonal-maxima-4-L", + "n": 4, + "nb": 4, + "lower": true, + "input": [ + "0000000000000000", + "4000000000000000", + "4000000000000000", + "0000000000000000", + "4000000000000000", + "3fb999999999999a", + "0000000000000000", + "3ff0000000000000", + "4000000000000000", + "0000000000000000", + "3fc999999999999a", + "bff0000000000000", + "0000000000000000", + "3ff0000000000000", + "bff0000000000000", + "0000000000000000" + ], + "a": [ + "0000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "4000000000000000", + "3fb999999999999a", + "7ff8000000000abc", + "7ff8000000000abc", + "bfa999999999999a", + "3ff0000000000000", + "3fd3333333333334", + "7ff8000000000abc", + "3fe0000000000000", + "8000000000000000", + "c000000000000000", + "0000000000000000" + ], + "w": [ + "0000000000000000", + "4000000000000000", + "7ff8000000000abc", + "7ff8000000000abc", + "4000000000000000", + "3fb999999999999a", + "7ff8000000000abc", + "7ff8000000000abc", + "4000000000000000", + "0000000000000000", + "3fd3333333333334", + "c000000000000000", + "0000000000000000", + "3ff0000000000000", + "c000000000000000", + "0000000000000000" + ], + "pivots": [ + -2, + -2, + -4, + -4 + ], + "kb": 4, + "info": 0 + }, + { + "name": "dense-indefinite-2-U", + "n": 6, + "nb": 2, + "lower": false, + "input": [ + "3ff1b44f8cee2bb2", + "3ff20a545393c6db", + "bfd75d04377a0cb7", + "c0050102fc6d5a16", + "bfed349b8f6454d9", + "c008f39e41aee520", + "3ff20a545393c6db", + "3ff36411e9d20ff3", + "4002b47cef6f06fb", + "3ff15916845f26a2", + "3fd671dbc44c0f0c", + "c0013fc7de5fd411", + "bfd75d04377a0cb7", + "4002b47cef6f06fb", + "bff2a19f810e4bff", + "bfe0b40f1ae18757", + "3fe2bc820aed1d0e", + "bfee35ba1b4574c7", + "c0050102fc6d5a16", + "3ff15916845f26a2", + "bfe0b40f1ae18757", + "bfe6b38b222f6e88", + "bff623c00114c036", + "3ffe5827ebf373cb", + "bfed349b8f6454d9", + "3fd671dbc44c0f0c", + "3fe2bc820aed1d0e", + "bff623c00114c036", + "bfb73d95fcb98fbd", + "401368c7c2d9f6e8", + "c008f39e41aee520", + "c0013fc7de5fd411", + "bfee35ba1b4574c7", + "3ffe5827ebf373cb", + "401368c7c2d9f6e8", + "c00374af0f77f856" + ], + "a": [ + "bfc9ee55dd78dd28", + "3fee7e0f1cbb9e36", + "bfbec0b4ee5619b6", + "c00a2cdb1498c0d8", + "bfe7cf07710f6ee6", + "bfc9db7466341954", + "7ff8000000000abc", + "3ff7ee1ab93e2ace", + "40051f5a848799ff", + "3fd911d4ff47f48f", + "bfda5e13ccda1ba8", + "3fb0876d0ae94f1a", + "7ff8000000000abc", + "7ff8000000000abc", + "bfef286d106839df", + "bfedddad97972241", + "bfc15322635c5e54", + "3fbe3e04ef00fea6", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "3fc59c652ae7215e", + "3fd00469efc83b56", + "bfd1f37a592f1d51", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "bfb73d95fcb98fbd", + "401368c7c2d9f6e8", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "c00374af0f77f856" + ], + "w": [ + "bfed349b8f6454d9", + "c008f39e41aee520", + "3fd671dbc44c0f0c", + "c0013fc7de5fd411", + "3fe2bc820aed1d0e", + "bfee35ba1b4574c7", + "bff623c00114c036", + "3ffe5827ebf373cb", + "bfb73d95fcb98fbd", + "401368c7c2d9f6e8", + "401368c7c2d9f6e8", + "c00374af0f77f856" + ], + "pivots": [ + -987654, + -987654, + -987654, + -987654, + -5, + -5 + ], + "kb": 2, + "info": 0 + }, + { + "name": "dense-indefinite-2-L", + "n": 6, + "nb": 2, + "lower": true, + "input": [ + "3ff1b44f8cee2bb2", + "3ff20a545393c6db", + "bfd75d04377a0cb7", + "c0050102fc6d5a16", + "bfed349b8f6454d9", + "c008f39e41aee520", + "3ff20a545393c6db", + "3ff36411e9d20ff3", + "4002b47cef6f06fb", + "3ff15916845f26a2", + "3fd671dbc44c0f0c", + "c0013fc7de5fd411", + "bfd75d04377a0cb7", + "4002b47cef6f06fb", + "bff2a19f810e4bff", + "bfe0b40f1ae18757", + "3fe2bc820aed1d0e", + "bfee35ba1b4574c7", + "c0050102fc6d5a16", + "3ff15916845f26a2", + "bfe0b40f1ae18757", + "bfe6b38b222f6e88", + "bff623c00114c036", + "3ffe5827ebf373cb", + "bfed349b8f6454d9", + "3fd671dbc44c0f0c", + "3fe2bc820aed1d0e", + "bff623c00114c036", + "bfb73d95fcb98fbd", + "401368c7c2d9f6e8", + "c008f39e41aee520", + "c0013fc7de5fd411", + "bfee35ba1b4574c7", + "3ffe5827ebf373cb", + "401368c7c2d9f6e8", + "c00374af0f77f856" + ], + "a": [ + "3ff1b44f8cee2bb2", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "c008f39e41aee520", + "c00374af0f77f856", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "3fc532a953a60927", + "3fc6808113688b60", + "bfee046ddd2d3bc9", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "bfefb1c35e62c113", + "3fdf62bde99f5d31", + "bfdaeabf504f896e", + "c010f5a6d87d69d8", + "7ff8000000000abc", + "7ff8000000000abc", + "bff65b9db2b5ee48", + "bfca0012c9053d69", + "bfbdca15f4aae726", + "c012ab494c9336d0", + "bfd859d09b1dc79e", + "7ff8000000000abc", + "3fe864d0f9542371", + "bfb74fbcae922f64", + "40043e599860b19c", + "400a1129670a8e74", + "3ff7d00930002f7b", + "3fc3fa3efb2d8e61" + ], + "w": [ + "3ff1b44f8cee2bb2", + "c008f39e41aee520", + "c008f39e41aee520", + "c00374af0f77f856", + "bfd75d04377a0cb7", + "bfee35ba1b4574c7", + "c0050102fc6d5a16", + "3ffe5827ebf373cb", + "bfed349b8f6454d9", + "401368c7c2d9f6e8", + "3ff20a545393c6db", + "c0013fc7de5fd411" + ], + "pivots": [ + -6, + -6, + -987654, + -987654, + -987654, + -987654 + ], + "kb": 2, + "info": 0 + }, + { + "name": "dense-indefinite-3-U", + "n": 6, + "nb": 3, + "lower": false, + "input": [ + "3ff1b44f8cee2bb2", + "3ff20a545393c6db", + "bfd75d04377a0cb7", + "c0050102fc6d5a16", + "bfed349b8f6454d9", + "c008f39e41aee520", + "3ff20a545393c6db", + "3ff36411e9d20ff3", + "4002b47cef6f06fb", + "3ff15916845f26a2", + "3fd671dbc44c0f0c", + "c0013fc7de5fd411", + "bfd75d04377a0cb7", + "4002b47cef6f06fb", + "bff2a19f810e4bff", + "bfe0b40f1ae18757", + "3fe2bc820aed1d0e", + "bfee35ba1b4574c7", + "c0050102fc6d5a16", + "3ff15916845f26a2", + "bfe0b40f1ae18757", + "bfe6b38b222f6e88", + "bff623c00114c036", + "3ffe5827ebf373cb", + "bfed349b8f6454d9", + "3fd671dbc44c0f0c", + "3fe2bc820aed1d0e", + "bff623c00114c036", + "bfb73d95fcb98fbd", + "401368c7c2d9f6e8", + "c008f39e41aee520", + "c0013fc7de5fd411", + "bfee35ba1b4574c7", + "3ffe5827ebf373cb", + "401368c7c2d9f6e8", + "c00374af0f77f856" + ], + "a": [ + "bfc9ee55dd78dd28", + "3fee7e0f1cbb9e36", + "bfbec0b4ee5619b6", + "c00a2cdb1498c0d8", + "bfe7cf07710f6ee6", + "bfc9db7466341954", + "7ff8000000000abc", + "3ff7ee1ab93e2ace", + "40051f5a848799ff", + "3fd911d4ff47f48f", + "bfda5e13ccda1ba8", + "3fb0876d0ae94f1a", + "7ff8000000000abc", + "7ff8000000000abc", + "bfef286d106839df", + "bfedddad97972241", + "bfc15322635c5e54", + "3fbe3e04ef00fea6", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "3fc59c652ae7215e", + "3fd00469efc83b56", + "bfd1f37a592f1d51", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "bfb73d95fcb98fbd", + "401368c7c2d9f6e8", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "c00374af0f77f856" + ], + "w": [ + "7ff8000000000abc", + "bfed349b8f6454d9", + "c008f39e41aee520", + "7ff8000000000abc", + "3fd671dbc44c0f0c", + "c0013fc7de5fd411", + "7ff8000000000abc", + "3fe2bc820aed1d0e", + "bfee35ba1b4574c7", + "7ff8000000000abc", + "bff623c00114c036", + "3ffe5827ebf373cb", + "7ff8000000000abc", + "bfb73d95fcb98fbd", + "401368c7c2d9f6e8", + "7ff8000000000abc", + "401368c7c2d9f6e8", + "c00374af0f77f856" + ], + "pivots": [ + -987654, + -987654, + -987654, + -987654, + -5, + -5 + ], + "kb": 2, + "info": 0 + }, + { + "name": "dense-indefinite-3-L", + "n": 6, + "nb": 3, + "lower": true, + "input": [ + "3ff1b44f8cee2bb2", + "3ff20a545393c6db", + "bfd75d04377a0cb7", + "c0050102fc6d5a16", + "bfed349b8f6454d9", + "c008f39e41aee520", + "3ff20a545393c6db", + "3ff36411e9d20ff3", + "4002b47cef6f06fb", + "3ff15916845f26a2", + "3fd671dbc44c0f0c", + "c0013fc7de5fd411", + "bfd75d04377a0cb7", + "4002b47cef6f06fb", + "bff2a19f810e4bff", + "bfe0b40f1ae18757", + "3fe2bc820aed1d0e", + "bfee35ba1b4574c7", + "c0050102fc6d5a16", + "3ff15916845f26a2", + "bfe0b40f1ae18757", + "bfe6b38b222f6e88", + "bff623c00114c036", + "3ffe5827ebf373cb", + "bfed349b8f6454d9", + "3fd671dbc44c0f0c", + "3fe2bc820aed1d0e", + "bff623c00114c036", + "bfb73d95fcb98fbd", + "401368c7c2d9f6e8", + "c008f39e41aee520", + "c0013fc7de5fd411", + "bfee35ba1b4574c7", + "3ffe5827ebf373cb", + "401368c7c2d9f6e8", + "c00374af0f77f856" + ], + "a": [ + "3ff1b44f8cee2bb2", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "c008f39e41aee520", + "c00374af0f77f856", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "3fc532a953a60927", + "3fc6808113688b60", + "bfee046ddd2d3bc9", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "bfefb1c35e62c113", + "3fdf62bde99f5d31", + "bfdaeabf504f896e", + "c010f5a6d87d69d8", + "7ff8000000000abc", + "7ff8000000000abc", + "bff65b9db2b5ee48", + "bfca0012c9053d69", + "bfbdca15f4aae726", + "c012ab494c9336d0", + "bfd859d09b1dc79e", + "7ff8000000000abc", + "3fe864d0f9542371", + "bfb74fbcae922f64", + "40043e599860b19c", + "400a1129670a8e74", + "3ff7d00930002f7b", + "3fc3fa3efb2d8e61" + ], + "w": [ + "3ff1b44f8cee2bb2", + "c008f39e41aee520", + "7ff8000000000abc", + "c008f39e41aee520", + "c00374af0f77f856", + "7ff8000000000abc", + "bfd75d04377a0cb7", + "bfee35ba1b4574c7", + "7ff8000000000abc", + "c0050102fc6d5a16", + "3ffe5827ebf373cb", + "7ff8000000000abc", + "bfed349b8f6454d9", + "401368c7c2d9f6e8", + "7ff8000000000abc", + "3ff20a545393c6db", + "c0013fc7de5fd411", + "7ff8000000000abc" + ], + "pivots": [ + -6, + -6, + -987654, + -987654, + -987654, + -987654 + ], + "kb": 2, + "info": 0 + }, + { + "name": "dense-indefinite-4-U", + "n": 6, + "nb": 4, + "lower": false, + "input": [ + "3ff1b44f8cee2bb2", + "3ff20a545393c6db", + "bfd75d04377a0cb7", + "c0050102fc6d5a16", + "bfed349b8f6454d9", + "c008f39e41aee520", + "3ff20a545393c6db", + "3ff36411e9d20ff3", + "4002b47cef6f06fb", + "3ff15916845f26a2", + "3fd671dbc44c0f0c", + "c0013fc7de5fd411", + "bfd75d04377a0cb7", + "4002b47cef6f06fb", + "bff2a19f810e4bff", + "bfe0b40f1ae18757", + "3fe2bc820aed1d0e", + "bfee35ba1b4574c7", + "c0050102fc6d5a16", + "3ff15916845f26a2", + "bfe0b40f1ae18757", + "bfe6b38b222f6e88", + "bff623c00114c036", + "3ffe5827ebf373cb", + "bfed349b8f6454d9", + "3fd671dbc44c0f0c", + "3fe2bc820aed1d0e", + "bff623c00114c036", + "bfb73d95fcb98fbd", + "401368c7c2d9f6e8", + "c008f39e41aee520", + "c0013fc7de5fd411", + "bfee35ba1b4574c7", + "3ffe5827ebf373cb", + "401368c7c2d9f6e8", + "c00374af0f77f856" + ], + "a": [ + "bfed7d8a137437a5", + "4002e188f10f304d", + "3fd25198154a0814", + "3f9372c8c61195d5", + "bfe7cf07710f6ee6", + "bfc9db7466341954", + "7ff8000000000abc", + "3ffbc04905bd7548", + "bfc1316052ca9ec6", + "bfd21b5005e34cf3", + "bfda5e13ccda1ba8", + "3fb0876d0ae94f1a", + "7ff8000000000abc", + "7ff8000000000abc", + "bfc9ee55dd78dd28", + "c00a2cdb1498c0d8", + "bfc15322635c5e54", + "3fbe3e04ef00fea6", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "3fc59c652ae7215e", + "3fd00469efc83b56", + "bfd1f37a592f1d51", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "bfb73d95fcb98fbd", + "401368c7c2d9f6e8", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "c00374af0f77f856" + ], + "w": [ + "bfbec0b4ee5619bc", + "bfedddad97972241", + "3fe2bc820aed1d0e", + "bfee35ba1b4574c7", + "3fee7e0f1cbb9e34", + "3fd911d4ff47f48f", + "3fd671dbc44c0f0c", + "c0013fc7de5fd411", + "bfc9ee55dd78dd28", + "c00a2cdb1498c0d8", + "bfed349b8f6454d9", + "c008f39e41aee520", + "c00a2cdb1498c0d8", + "3fc59c652ae7215e", + "bff623c00114c036", + "3ffe5827ebf373cb", + "7ff8000000000abc", + "7ff8000000000abc", + "bfb73d95fcb98fbd", + "401368c7c2d9f6e8", + "7ff8000000000abc", + "7ff8000000000abc", + "401368c7c2d9f6e8", + "c00374af0f77f856" + ], + "pivots": [ + -987654, + -987654, + -1, + -1, + -5, + -5 + ], + "kb": 4, + "info": 0 + }, + { + "name": "dense-indefinite-4-L", + "n": 6, + "nb": 4, + "lower": true, + "input": [ + "3ff1b44f8cee2bb2", + "3ff20a545393c6db", + "bfd75d04377a0cb7", + "c0050102fc6d5a16", + "bfed349b8f6454d9", + "c008f39e41aee520", + "3ff20a545393c6db", + "3ff36411e9d20ff3", + "4002b47cef6f06fb", + "3ff15916845f26a2", + "3fd671dbc44c0f0c", + "c0013fc7de5fd411", + "bfd75d04377a0cb7", + "4002b47cef6f06fb", + "bff2a19f810e4bff", + "bfe0b40f1ae18757", + "3fe2bc820aed1d0e", + "bfee35ba1b4574c7", + "c0050102fc6d5a16", + "3ff15916845f26a2", + "bfe0b40f1ae18757", + "bfe6b38b222f6e88", + "bff623c00114c036", + "3ffe5827ebf373cb", + "bfed349b8f6454d9", + "3fd671dbc44c0f0c", + "3fe2bc820aed1d0e", + "bff623c00114c036", + "bfb73d95fcb98fbd", + "401368c7c2d9f6e8", + "c008f39e41aee520", + "c0013fc7de5fd411", + "bfee35ba1b4574c7", + "3ffe5827ebf373cb", + "401368c7c2d9f6e8", + "c00374af0f77f856" + ], + "a": [ + "3ff1b44f8cee2bb2", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "c008f39e41aee520", + "c00374af0f77f856", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "3fc532a953a60927", + "3fc6808113688b60", + "bfee046ddd2d3bc9", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "bfefb1c35e62c113", + "3fdf62bde99f5d31", + "40043e599860b19c", + "3fc3fa3efb2d8e61", + "7ff8000000000abc", + "7ff8000000000abc", + "bff65b9db2b5ee48", + "bfca0012c9053d69", + "3fe27d2b3989785c", + "3fc587834e8a4368", + "bfe208d0c02bd50c", + "7ff8000000000abc", + "3fe864d0f9542371", + "bfb74fbcae922f64", + "3ff44d741e375eb6", + "3fd377b006dacaf8", + "c013e3a8ce5e9496", + "c012ca1707e7ad20" + ], + "w": [ + "3ff1b44f8cee2bb2", + "c008f39e41aee520", + "7ff8000000000abc", + "7ff8000000000abc", + "c008f39e41aee520", + "c00374af0f77f856", + "7ff8000000000abc", + "7ff8000000000abc", + "bfd75d04377a0cb7", + "bfee35ba1b4574c7", + "bfee046ddd2d3bc9", + "40043e599860b19c", + "3ff20a545393c6db", + "c0013fc7de5fd411", + "40043e599860b19c", + "3fc3fa3efb2d8e61", + "bfed349b8f6454d9", + "401368c7c2d9f6e8", + "bfbdca15f4aae726", + "3ff7d00930002f7b", + "c0050102fc6d5a16", + "3ffe5827ebf373cb", + "bfdaeabf504f896e", + "400a1129670a8e74" + ], + "pivots": [ + -6, + -6, + -6, + -6, + -987654, + -987654 + ], + "kb": 4, + "info": 0 + }, + { + "name": "dense-indefinite-6-U", + "n": 6, + "nb": 6, + "lower": false, + "input": [ + "3ff1b44f8cee2bb2", + "3ff20a545393c6db", + "bfd75d04377a0cb7", + "c0050102fc6d5a16", + "bfed349b8f6454d9", + "c008f39e41aee520", + "3ff20a545393c6db", + "3ff36411e9d20ff3", + "4002b47cef6f06fb", + "3ff15916845f26a2", + "3fd671dbc44c0f0c", + "c0013fc7de5fd411", + "bfd75d04377a0cb7", + "4002b47cef6f06fb", + "bff2a19f810e4bff", + "bfe0b40f1ae18757", + "3fe2bc820aed1d0e", + "bfee35ba1b4574c7", + "c0050102fc6d5a16", + "3ff15916845f26a2", + "bfe0b40f1ae18757", + "bfe6b38b222f6e88", + "bff623c00114c036", + "3ffe5827ebf373cb", + "bfed349b8f6454d9", + "3fd671dbc44c0f0c", + "3fe2bc820aed1d0e", + "bff623c00114c036", + "bfb73d95fcb98fbd", + "401368c7c2d9f6e8", + "c008f39e41aee520", + "c0013fc7de5fd411", + "bfee35ba1b4574c7", + "3ffe5827ebf373cb", + "401368c7c2d9f6e8", + "c00374af0f77f856" + ], + "a": [ + "c0108847864563c6", + "3ff5c5950e52503b", + "3fd25198154a0814", + "3f9372c8c61195d5", + "bfe7cf07710f6ee6", + "bfc9db7466341954", + "7ff8000000000abc", + "3ffbc04905bd7548", + "bfc1316052ca9ec6", + "bfd21b5005e34cf3", + "bfda5e13ccda1ba8", + "3fb0876d0ae94f1a", + "7ff8000000000abc", + "7ff8000000000abc", + "bfc9ee55dd78dd28", + "c00a2cdb1498c0d8", + "bfc15322635c5e54", + "3fbe3e04ef00fea6", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "3fc59c652ae7215e", + "3fd00469efc83b56", + "bfd1f37a592f1d51", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "bfb73d95fcb98fbd", + "401368c7c2d9f6e8", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "c00374af0f77f856" + ], + "w": [ + "c0108847864563c6", + "4002e188f10f304d", + "bfbec0b4ee5619bc", + "bfedddad97972241", + "3fe2bc820aed1d0e", + "bfee35ba1b4574c7", + "7ff8000000000abc", + "3ffbc04905bd7548", + "3fee7e0f1cbb9e34", + "3fd911d4ff47f48f", + "3fd671dbc44c0f0c", + "c0013fc7de5fd411", + "7ff8000000000abc", + "7ff8000000000abc", + "bfc9ee55dd78dd28", + "c00a2cdb1498c0d8", + "bfed349b8f6454d9", + "c008f39e41aee520", + "7ff8000000000abc", + "7ff8000000000abc", + "c00a2cdb1498c0d8", + "3fc59c652ae7215e", + "bff623c00114c036", + "3ffe5827ebf373cb", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "bfb73d95fcb98fbd", + "401368c7c2d9f6e8", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "401368c7c2d9f6e8", + "c00374af0f77f856" + ], + "pivots": [ + 1, + 2, + -1, + -1, + -5, + -5 + ], + "kb": 6, + "info": 0 + }, + { + "name": "dense-indefinite-6-L", + "n": 6, + "nb": 6, + "lower": true, + "input": [ + "3ff1b44f8cee2bb2", + "3ff20a545393c6db", + "bfd75d04377a0cb7", + "c0050102fc6d5a16", + "bfed349b8f6454d9", + "c008f39e41aee520", + "3ff20a545393c6db", + "3ff36411e9d20ff3", + "4002b47cef6f06fb", + "3ff15916845f26a2", + "3fd671dbc44c0f0c", + "c0013fc7de5fd411", + "bfd75d04377a0cb7", + "4002b47cef6f06fb", + "bff2a19f810e4bff", + "bfe0b40f1ae18757", + "3fe2bc820aed1d0e", + "bfee35ba1b4574c7", + "c0050102fc6d5a16", + "3ff15916845f26a2", + "bfe0b40f1ae18757", + "bfe6b38b222f6e88", + "bff623c00114c036", + "3ffe5827ebf373cb", + "bfed349b8f6454d9", + "3fd671dbc44c0f0c", + "3fe2bc820aed1d0e", + "bff623c00114c036", + "bfb73d95fcb98fbd", + "401368c7c2d9f6e8", + "c008f39e41aee520", + "c0013fc7de5fd411", + "bfee35ba1b4574c7", + "3ffe5827ebf373cb", + "401368c7c2d9f6e8", + "c00374af0f77f856" + ], + "a": [ + "3ff1b44f8cee2bb2", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "c008f39e41aee520", + "c00374af0f77f856", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "3fc532a953a60927", + "3fc6808113688b60", + "bfee046ddd2d3bc9", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "bfefb1c35e62c113", + "3fdf62bde99f5d31", + "40043e599860b19c", + "3fc3fa3efb2d8e61", + "7ff8000000000abc", + "7ff8000000000abc", + "bff65b9db2b5ee48", + "bfca0012c9053d69", + "3fe27d2b3989785c", + "3fc587834e8a4368", + "c012ca1707e7ad20", + "7ff8000000000abc", + "3fe864d0f9542371", + "bfb74fbcae922f64", + "3ff44d741e375eb6", + "3fd377b006dacaf8", + "3ff0efc4c129b67c", + "4012cc9bf4d59d3a" + ], + "w": [ + "3ff1b44f8cee2bb2", + "c008f39e41aee520", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "c008f39e41aee520", + "c00374af0f77f856", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "bfd75d04377a0cb7", + "bfee35ba1b4574c7", + "bfee046ddd2d3bc9", + "40043e599860b19c", + "7ff8000000000abc", + "7ff8000000000abc", + "3ff20a545393c6db", + "c0013fc7de5fd411", + "40043e599860b19c", + "3fc3fa3efb2d8e61", + "7ff8000000000abc", + "7ff8000000000abc", + "c0050102fc6d5a16", + "3ffe5827ebf373cb", + "bfdaeabf504f896e", + "400a1129670a8e74", + "c012ca1707e7ad20", + "c013e3a8ce5e9497", + "bfed349b8f6454d9", + "401368c7c2d9f6e8", + "bfbdca15f4aae726", + "3ff7d00930002f7b", + "c013e3a8ce5e9497", + "4012cc9bf4d59d3a" + ], + "pivots": [ + -6, + -6, + -6, + -6, + 6, + 6 + ], + "kb": 6, + "info": 0 + }, + { + "name": "dense-positive-definite-2-U", + "n": 6, + "nb": 2, + "lower": false, + "input": [ + "4026e20feaf33a01", + "bfb0dc5e90d68ee0", + "3ff821b8ef1a7052", + "3fd13a1faba9bbad", + "c0142893afa70d50", + "bff9a8d8deff9b92", + "bfb0dc5e90d68ee0", + "400f8e79156c1607", + "3f975593f103dd58", + "bfec93d718a12385", + "c00213a99007d16f", + "3fe070e00190d823", + "3ff821b8ef1a7052", + "3f975593f103dd58", + "401235518bd96554", + "3ff2233355af490f", + "bff8549afd807627", + "c009318bde06888e", + "3fd13a1faba9bbad", + "bfec93d718a12385", + "3ff2233355af490f", + "3ffc2acfff23facd", + "3fe2f90b0e86263a", + "bfffdc80cbc7b6f8", + "c0142893afa70d50", + "c00213a99007d16f", + "bff8549afd807627", + "3fe2f90b0e86263a", + "402a1ae8887b7351", + "c010da5c435fef2c", + "bff9a8d8deff9b92", + "3fe070e00190d823", + "c009318bde06888e", + "bfffdc80cbc7b6f8", + "c010da5c435fef2c", + "402b5cadc9ab33c0" + ], + "a": [ + "402681cf62d3daef", + "bf7715ef54cd80d8", + "3ff239a89c80643b", + "3fa24cf8726fb2d0", + "c016225124b14637", + "bfbe024b06d94ded", + "7ff8000000000abc", + "400f66f533399b10", + "3fc20e030ad03215", + "bfea2f382449f305", + "c000cf9e402bc558", + "3fa33a4bd4675521", + "7ff8000000000abc", + "7ff8000000000abc", + "400e9e08ea1a66c3", + "3fe59b5b9549af0f", + "c003ec85d50a4b9e", + "bfcd76c5334d59de", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "3ff78798a97bb3de", + "bf94d82a35f38dc0", + "bfc2a18812f120f5", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "40278293c1ab9d68", + "bfd3b5a96aa4a42a", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "402b5cadc9ab33c0" + ], + "w": [ + "7ff8000000000abc", + "bff9a8d8deff9b92", + "7ff8000000000abc", + "3fe070e00190d823", + "7ff8000000000abc", + "c009318bde06888e", + "7ff8000000000abc", + "bfffdc80cbc7b6f8", + "7ff8000000000abc", + "c010da5c435fef2c", + "7ff8000000000abc", + "402b5cadc9ab33c0" + ], + "pivots": [ + -987654, + -987654, + -987654, + -987654, + -987654, + 6 + ], + "kb": 1, + "info": 0 + }, + { + "name": "dense-positive-definite-2-L", + "n": 6, + "nb": 2, + "lower": true, + "input": [ + "4026e20feaf33a01", + "bfb0dc5e90d68ee0", + "3ff821b8ef1a7052", + "3fd13a1faba9bbad", + "c0142893afa70d50", + "bff9a8d8deff9b92", + "bfb0dc5e90d68ee0", + "400f8e79156c1607", + "3f975593f103dd58", + "bfec93d718a12385", + "c00213a99007d16f", + "3fe070e00190d823", + "3ff821b8ef1a7052", + "3f975593f103dd58", + "401235518bd96554", + "3ff2233355af490f", + "bff8549afd807627", + "c009318bde06888e", + "3fd13a1faba9bbad", + "bfec93d718a12385", + "3ff2233355af490f", + "3ffc2acfff23facd", + "3fe2f90b0e86263a", + "bfffdc80cbc7b6f8", + "c0142893afa70d50", + "c00213a99007d16f", + "bff8549afd807627", + "3fe2f90b0e86263a", + "402a1ae8887b7351", + "c010da5c435fef2c", + "bff9a8d8deff9b92", + "3fe070e00190d823", + "c009318bde06888e", + "bfffdc80cbc7b6f8", + "c010da5c435fef2c", + "402b5cadc9ab33c0" + ], + "a": [ + "4026e20feaf33a01", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "bf779413002c4039", + "400f8db24ed90f8e", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "3fc0df823e9c1d14", + "3fa01cc3c656f09e", + "401169baf0d1080e", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "3f98172e7f51a286", + "bfec87259ad0acf5", + "3ff191dd25a961a8", + "3ffc10dfda04c521", + "7ff8000000000abc", + "7ff8000000000abc", + "bfdc30a05955f93a", + "c0024f13572dd18a", + "bfeb6708a867d6fb", + "3fe6c44d5ca139ac", + "4025aa5fc1e2ad50", + "7ff8000000000abc", + "bfc1f0fc6e8eab8c", + "3fe0253fa1720acb", + "c00780972d27a29a", + "bfff41f701683c7d", + "c013adb3b6e990ee", + "402ae99649d09c1f" + ], + "w": [ + "4026e20feaf33a01", + "7ff8000000000abc", + "bfb0dc5e90d68ee0", + "7ff8000000000abc", + "3ff821b8ef1a7052", + "7ff8000000000abc", + "3fd13a1faba9bbad", + "7ff8000000000abc", + "c0142893afa70d50", + "7ff8000000000abc", + "bff9a8d8deff9b92", + "7ff8000000000abc" + ], + "pivots": [ + 1, + -987654, + -987654, + -987654, + -987654, + -987654 + ], + "kb": 1, + "info": 0 + }, + { + "name": "dense-positive-definite-3-U", + "n": 6, + "nb": 3, + "lower": false, + "input": [ + "4026e20feaf33a01", + "bfb0dc5e90d68ee0", + "3ff821b8ef1a7052", + "3fd13a1faba9bbad", + "c0142893afa70d50", + "bff9a8d8deff9b92", + "bfb0dc5e90d68ee0", + "400f8e79156c1607", + "3f975593f103dd58", + "bfec93d718a12385", + "c00213a99007d16f", + "3fe070e00190d823", + "3ff821b8ef1a7052", + "3f975593f103dd58", + "401235518bd96554", + "3ff2233355af490f", + "bff8549afd807627", + "c009318bde06888e", + "3fd13a1faba9bbad", + "bfec93d718a12385", + "3ff2233355af490f", + "3ffc2acfff23facd", + "3fe2f90b0e86263a", + "bfffdc80cbc7b6f8", + "c0142893afa70d50", + "c00213a99007d16f", + "bff8549afd807627", + "3fe2f90b0e86263a", + "402a1ae8887b7351", + "c010da5c435fef2c", + "bff9a8d8deff9b92", + "3fe070e00190d823", + "c009318bde06888e", + "bfffdc80cbc7b6f8", + "c010da5c435fef2c", + "402b5cadc9ab33c0" + ], + "a": [ + "40214c243dd9a904", + "bfefd5a2e699492c", + "bfa10ac537ff1f68", + "3f9aca04acc1a820", + "bfde20882c1f9618", + "bfbe024b06d94ded", + "7ff8000000000abc", + "400c65a0479a0eca", + "bfd3774f6d601573", + "bfea4d0773d2e296", + "bfc6e1bc9451bcdb", + "3fa33a4bd4675521", + "7ff8000000000abc", + "7ff8000000000abc", + "400a656890c5ad07", + "3fe578072d1cbb39", + "bfcb1e6b2ef2808c", + "bfcd76c5334d59de", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "3ff78773b33a7286", + "bf5c5f27d8014dac", + "bfc2a18812f120f5", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "40278293c1ab9d68", + "bfd3b5a96aa4a42a", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "402b5cadc9ab33c0" + ], + "w": [ + "7ff8000000000abc", + "c016225124b14637", + "bff9a8d8deff9b92", + "7ff8000000000abc", + "c000cf9e402bc558", + "3fe070e00190d823", + "7ff8000000000abc", + "c003ec85d50a4b9e", + "c009318bde06888e", + "7ff8000000000abc", + "bf94d82a35f38dc0", + "bfffdc80cbc7b6f8", + "7ff8000000000abc", + "40278293c1ab9d68", + "c010da5c435fef2c", + "7ff8000000000abc", + "7ff8000000000abc", + "402b5cadc9ab33c0" + ], + "pivots": [ + -987654, + -987654, + -987654, + -987654, + 5, + 6 + ], + "kb": 2, + "info": 0 + }, + { + "name": "dense-positive-definite-3-L", + "n": 6, + "nb": 3, + "lower": true, + "input": [ + "4026e20feaf33a01", + "bfb0dc5e90d68ee0", + "3ff821b8ef1a7052", + "3fd13a1faba9bbad", + "c0142893afa70d50", + "bff9a8d8deff9b92", + "bfb0dc5e90d68ee0", + "400f8e79156c1607", + "3f975593f103dd58", + "bfec93d718a12385", + "c00213a99007d16f", + "3fe070e00190d823", + "3ff821b8ef1a7052", + "3f975593f103dd58", + "401235518bd96554", + "3ff2233355af490f", + "bff8549afd807627", + "c009318bde06888e", + "3fd13a1faba9bbad", + "bfec93d718a12385", + "3ff2233355af490f", + "3ffc2acfff23facd", + "3fe2f90b0e86263a", + "bfffdc80cbc7b6f8", + "c0142893afa70d50", + "c00213a99007d16f", + "bff8549afd807627", + "3fe2f90b0e86263a", + "402a1ae8887b7351", + "c010da5c435fef2c", + "bff9a8d8deff9b92", + "3fe070e00190d823", + "c009318bde06888e", + "bfffdc80cbc7b6f8", + "c010da5c435fef2c", + "402b5cadc9ab33c0" + ], + "a": [ + "4026e20feaf33a01", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "bf779413002c4039", + "400f8db24ed90f8e", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "3fc0df823e9c1d14", + "3f805721db12afd9", + "401169791ec7ecd7", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "3f98172e7f51a286", + "bfccee7d77d3d280", + "3ff1aeffa67e04d7", + "3ff8d7841cc83a49", + "7ff8000000000abc", + "7ff8000000000abc", + "bfdc30a05955f93a", + "bfe2916668abf8af", + "bfead17267f6db30", + "3fc8daa21c37bcf8", + "40230274cfbb378c", + "7ff8000000000abc", + "bfc1f0fc6e8eab8c", + "3fc05fbc71ca5474", + "c00788d5c3524c85", + "bffd6ed980d8ece6", + "c01281e9af13c5d6", + "402ac88a93e91d13" + ], + "w": [ + "4026e20feaf33a01", + "7ff8000000000abc", + "7ff8000000000abc", + "bfb0dc5e90d68ee0", + "400f8db24ed90f8e", + "7ff8000000000abc", + "3ff821b8ef1a7052", + "3fa01cc3c656f09e", + "7ff8000000000abc", + "3fd13a1faba9bbad", + "bfec87259ad0acf5", + "7ff8000000000abc", + "c0142893afa70d50", + "c0024f13572dd18a", + "7ff8000000000abc", + "bff9a8d8deff9b92", + "3fe0253fa1720acb", + "7ff8000000000abc" + ], + "pivots": [ + 1, + 2, + -987654, + -987654, + -987654, + -987654 + ], + "kb": 2, + "info": 0 + }, + { + "name": "dense-positive-definite-6-U", + "n": 6, + "nb": 6, + "lower": false, + "input": [ + "4026e20feaf33a01", + "bfb0dc5e90d68ee0", + "3ff821b8ef1a7052", + "3fd13a1faba9bbad", + "c0142893afa70d50", + "bff9a8d8deff9b92", + "bfb0dc5e90d68ee0", + "400f8e79156c1607", + "3f975593f103dd58", + "bfec93d718a12385", + "c00213a99007d16f", + "3fe070e00190d823", + "3ff821b8ef1a7052", + "3f975593f103dd58", + "401235518bd96554", + "3ff2233355af490f", + "bff8549afd807627", + "c009318bde06888e", + "3fd13a1faba9bbad", + "bfec93d718a12385", + "3ff2233355af490f", + "3ffc2acfff23facd", + "3fe2f90b0e86263a", + "bfffdc80cbc7b6f8", + "c0142893afa70d50", + "c00213a99007d16f", + "bff8549afd807627", + "3fe2f90b0e86263a", + "402a1ae8887b7351", + "c010da5c435fef2c", + "bff9a8d8deff9b92", + "3fe070e00190d823", + "c009318bde06888e", + "bfffdc80cbc7b6f8", + "c010da5c435fef2c", + "402b5cadc9ab33c0" + ], + "a": [ + "4020aca06252c072", + "bfd44a068c1df800", + "bf8ef0311978e584", + "3f9237832bc99ca9", + "bfde20882c1f9618", + "bfbe024b06d94ded", + "7ff8000000000abc", + "4008b56bcb0f5b4e", + "3f983919f2be215b", + "bfe1e284c7af6cec", + "bfc6e1bc9451bcdb", + "3fa33a4bd4675521", + "7ff8000000000abc", + "7ff8000000000abc", + "4007f28f67aeabf5", + "3fdd32b1b9e5655e", + "bfcb1e6b2ef2808c", + "bfcd76c5334d59de", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "3ff78773b33a7286", + "bf5c5f27d8014dac", + "bfc2a18812f120f5", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "40278293c1ab9d68", + "bfd3b5a96aa4a42a", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "402b5cadc9ab33c0" + ], + "w": [ + "4020aca06252c072", + "bfef5517ecc87c4e", + "bfa727266338ef68", + "3f9aca04acc1a820", + "c016225124b14637", + "bff9a8d8deff9b92", + "7ff8000000000abc", + "4008b56bcb0f5b4e", + "3fb220a7085c5ec4", + "bfea4d0773d2e296", + "c000cf9e402bc558", + "3fe070e00190d823", + "7ff8000000000abc", + "7ff8000000000abc", + "4007f28f67aeabf5", + "3fe578072d1cbb39", + "c003ec85d50a4b9e", + "c009318bde06888e", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "3ff78773b33a7286", + "bf94d82a35f38dc0", + "bfffdc80cbc7b6f8", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "40278293c1ab9d68", + "c010da5c435fef2c", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "402b5cadc9ab33c0" + ], + "pivots": [ + 1, + 2, + 3, + 4, + 5, + 6 + ], + "kb": 6, + "info": 0 + }, + { + "name": "dense-positive-definite-6-L", + "n": 6, + "nb": 6, + "lower": true, + "input": [ + "4026e20feaf33a01", + "bfb0dc5e90d68ee0", + "3ff821b8ef1a7052", + "3fd13a1faba9bbad", + "c0142893afa70d50", + "bff9a8d8deff9b92", + "bfb0dc5e90d68ee0", + "400f8e79156c1607", + "3f975593f103dd58", + "bfec93d718a12385", + "c00213a99007d16f", + "3fe070e00190d823", + "3ff821b8ef1a7052", + "3f975593f103dd58", + "401235518bd96554", + "3ff2233355af490f", + "bff8549afd807627", + "c009318bde06888e", + "3fd13a1faba9bbad", + "bfec93d718a12385", + "3ff2233355af490f", + "3ffc2acfff23facd", + "3fe2f90b0e86263a", + "bfffdc80cbc7b6f8", + "c0142893afa70d50", + "c00213a99007d16f", + "bff8549afd807627", + "3fe2f90b0e86263a", + "402a1ae8887b7351", + "c010da5c435fef2c", + "bff9a8d8deff9b92", + "3fe070e00190d823", + "c009318bde06888e", + "bfffdc80cbc7b6f8", + "c010da5c435fef2c", + "402b5cadc9ab33c0" + ], + "a": [ + "4026e20feaf33a01", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "bf779413002c4039", + "400f8db24ed90f8e", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "3fc0df823e9c1d14", + "3f805721db12afd9", + "401169791ec7ecd7", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "3f98172e7f51a286", + "bfccee7d77d3d280", + "3fd03fe32e50303f", + "3ff45a1d2a0222ac", + "7ff8000000000abc", + "7ff8000000000abc", + "bfdc30a05955f93a", + "bfe2916668abf8af", + "bfc8a4b3c31c7717", + "3fd479cece775034", + "40226d2ed345c19f", + "7ff8000000000abc", + "bfc1f0fc6e8eab8c", + "3fc05fbc71ca5474", + "bfe5a04237b98798", + "bfeb7cdcac5ac592", + "bfe0d2c5b0a8d5bd", + "401fac95d79b156f" + ], + "w": [ + "4026e20feaf33a01", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "bfb0dc5e90d68ee0", + "400f8db24ed90f8e", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "3ff821b8ef1a7052", + "3fa01cc3c656f09e", + "401169791ec7ecd7", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "3fd13a1faba9bbad", + "bfec87259ad0acf5", + "3ff1aeffa67e04d7", + "3ff45a1d2a0222ac", + "7ff8000000000abc", + "7ff8000000000abc", + "c0142893afa70d50", + "c0024f13572dd18a", + "bfead17267f6db30", + "3fda0b94ffe7d414", + "40226d2ed345c19f", + "7ff8000000000abc", + "bff9a8d8deff9b92", + "3fe0253fa1720acb", + "c00788d5c3524c85", + "bff17b72259b2e32", + "c0135feb859eb21e", + "401fac95d79b156f" + ], + "pivots": [ + 1, + 2, + 3, + 4, + 5, + 6 + ], + "kb": 6, + "info": 0 + }, + { + "name": "dense-huge-scale-3-U", + "n": 6, + "nb": 3, + "lower": false, + "input": [ + "58db6cb74a4b601e", + "58dbf1f64823c9e2", + "d8c218683ea77f8a", + "d8f04498293f7073", + "d8d69ec52376ecbd", + "d8f35353e4e41e62", + "58dbf1f64823c9e2", + "58de0986e2d2711b", + "58ecf98b44328889", + "58dadf68953454fd", + "58c16245e3bded9d", + "d8eab834eb10a139", + "d8c218683ea77f8a", + "58ecf98b44328889", + "d8dcdc524cca85ee", + "d8c9dfc5c9cb9658", + "58cd05f79af077d0", + "d8d765e9e92610e3", + "d8f04498293f7073", + "58dadf68953454fd", + "d8c9dfc5c9cb9658", + "d8d19525b345a7d9", + "d8e125c6cdce6415", + "58e780945f62a119", + "d8d69ec52376ecbd", + "58c16245e3bded9d", + "58cd05f79af077d0", + "d8e125c6cdce6415", + "d8a200104ac5e71d", + "58fe10d2c9df54e4", + "d8f35353e4e41e62", + "d8eab834eb10a139", + "d8d765e9e92610e3", + "58e780945f62a119", + "58fe10d2c9df54e4", + "d8ee23432acd4788" + ], + "a": [ + "d8b4158347605348", + "58d79defac0be486", + "d8a7d18e5d451a42", + "d8f445ef9cc05e2a", + "bfe7cf07710f6ee6", + "bfc9db7466341954", + "7ff8000000000abc", + "58e288c7cc938580", + "58f05c1841d66925", + "58c36aba97c85c32", + "bfda5e13ccda1ba7", + "3fb0876d0ae94f1a", + "7ff8000000000abc", + "7ff8000000000abc", + "d8d821e37ac1d659", + "d8d721b7de348a2a", + "bfc15322635c5e54", + "3fbe3e04ef00fea7", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "58b0bcf1180e950a", + "3fd00469efc83b56", + "bfd1f37a592f1d51", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "d8a200104ac5e71d", + "58fe10d2c9df54e4", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "d8ee23432acd4788" + ], + "w": [ + "7ff8000000000abc", + "d8d69ec52376ecbd", + "d8f35353e4e41e62", + "7ff8000000000abc", + "58c16245e3bded9d", + "d8eab834eb10a139", + "7ff8000000000abc", + "58cd05f79af077d0", + "d8d765e9e92610e3", + "7ff8000000000abc", + "d8e125c6cdce6415", + "58e780945f62a119", + "7ff8000000000abc", + "d8a200104ac5e71d", + "58fe10d2c9df54e4", + "7ff8000000000abc", + "58fe10d2c9df54e4", + "d8ee23432acd4788" + ], + "pivots": [ + -987654, + -987654, + -987654, + -987654, + -5, + -5 + ], + "kb": 2, + "info": 0 + }, + { + "name": "dense-huge-scale-3-L", + "n": 6, + "nb": 3, + "lower": true, + "input": [ + "58db6cb74a4b601e", + "58dbf1f64823c9e2", + "d8c218683ea77f8a", + "d8f04498293f7073", + "d8d69ec52376ecbd", + "d8f35353e4e41e62", + "58dbf1f64823c9e2", + "58de0986e2d2711b", + "58ecf98b44328889", + "58dadf68953454fd", + "58c16245e3bded9d", + "d8eab834eb10a139", + "d8c218683ea77f8a", + "58ecf98b44328889", + "d8dcdc524cca85ee", + "d8c9dfc5c9cb9658", + "58cd05f79af077d0", + "d8d765e9e92610e3", + "d8f04498293f7073", + "58dadf68953454fd", + "d8c9dfc5c9cb9658", + "d8d19525b345a7d9", + "d8e125c6cdce6415", + "58e780945f62a119", + "d8d69ec52376ecbd", + "58c16245e3bded9d", + "58cd05f79af077d0", + "d8e125c6cdce6415", + "d8a200104ac5e71d", + "58fe10d2c9df54e4", + "d8f35353e4e41e62", + "d8eab834eb10a139", + "d8d765e9e92610e3", + "58e780945f62a119", + "58fe10d2c9df54e4", + "d8ee23432acd4788" + ], + "a": [ + "58db6cb74a4b601e", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "d8f35353e4e41e62", + "d8ee23432acd4788", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "3fc532a953a60926", + "3fc6808113688b60", + "d8d73fbb4d06692e", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "bfefb1c35e62c112", + "3fdf62bde99f5d32", + "d8c4d902ae3c2ca7", + "d8fa4560cfd944a2", + "7ff8000000000abc", + "7ff8000000000abc", + "bff65b9db2b5ee47", + "bfca0012c9053d68", + "d8a7128b2a56771a", + "d8fceb4a4ca34e8a", + "d8c2dc3447229414", + "7ff8000000000abc", + "3fe864d0f954236f", + "bfb74fbcae922f62", + "58ef5ba69154c57a", + "58f4307c86c2ab43", + "58e2717dea792b9c", + "58aef227b5a30066" + ], + "w": [ + "58db6cb74a4b601e", + "d8f35353e4e41e62", + "7ff8000000000abc", + "d8f35353e4e41e62", + "d8ee23432acd4788", + "7ff8000000000abc", + "d8c218683ea77f8a", + "d8d765e9e92610e3", + "7ff8000000000abc", + "d8f04498293f7073", + "58e780945f62a119", + "7ff8000000000abc", + "d8d69ec52376ecbd", + "58fe10d2c9df54e4", + "7ff8000000000abc", + "58dbf1f64823c9e2", + "d8eab834eb10a139", + "7ff8000000000abc" + ], + "pivots": [ + -6, + -6, + -987654, + -987654, + -987654, + -987654 + ], + "kb": 2, + "info": 0 + }, + { + "name": "dense-huge-scale-6-U", + "n": 6, + "nb": 6, + "lower": false, + "input": [ + "58db6cb74a4b601e", + "58dbf1f64823c9e2", + "d8c218683ea77f8a", + "d8f04498293f7073", + "d8d69ec52376ecbd", + "d8f35353e4e41e62", + "58dbf1f64823c9e2", + "58de0986e2d2711b", + "58ecf98b44328889", + "58dadf68953454fd", + "58c16245e3bded9d", + "d8eab834eb10a139", + "d8c218683ea77f8a", + "58ecf98b44328889", + "d8dcdc524cca85ee", + "d8c9dfc5c9cb9658", + "58cd05f79af077d0", + "d8d765e9e92610e3", + "d8f04498293f7073", + "58dadf68953454fd", + "d8c9dfc5c9cb9658", + "d8d19525b345a7d9", + "d8e125c6cdce6415", + "58e780945f62a119", + "d8d69ec52376ecbd", + "58c16245e3bded9d", + "58cd05f79af077d0", + "d8e125c6cdce6415", + "d8a200104ac5e71d", + "58fe10d2c9df54e4", + "d8f35353e4e41e62", + "d8eab834eb10a139", + "d8d765e9e92610e3", + "58e780945f62a119", + "58fe10d2c9df54e4", + "d8ee23432acd4788" + ], + "a": [ + "d8f99bf4d580fc47", + "3ff5c5950e52503a", + "3fd25198154a0813", + "3f9372c8c61195d4", + "bfe7cf07710f6ee6", + "bfc9db7466341954", + "7ff8000000000abc", + "58e57e6646e421ac", + "bfc1316052ca9ec8", + "bfd21b5005e34cf4", + "bfda5e13ccda1ba7", + "3fb0876d0ae94f1a", + "7ff8000000000abc", + "7ff8000000000abc", + "d8b4158347605348", + "d8f445ef9cc05e2a", + "bfc15322635c5e54", + "3fbe3e04ef00fea7", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "58b0bcf1180e950a", + "3fd00469efc83b56", + "bfd1f37a592f1d51", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "d8a200104ac5e71d", + "58fe10d2c9df54e4", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "d8ee23432acd4788" + ], + "w": [ + "d8f99bf4d580fc47", + "58ed3f52c4a9e64d", + "d8a7d18e5d451a44", + "d8d721b7de348a2a", + "58cd05f79af077d0", + "d8d765e9e92610e3", + "7ff8000000000abc", + "58e57e6646e421ac", + "58d79defac0be485", + "58c36aba97c85c32", + "58c16245e3bded9d", + "d8eab834eb10a139", + "7ff8000000000abc", + "7ff8000000000abc", + "d8b4158347605348", + "d8f445ef9cc05e2a", + "d8d69ec52376ecbd", + "d8f35353e4e41e62", + "7ff8000000000abc", + "7ff8000000000abc", + "d8f445ef9cc05e2a", + "58b0bcf1180e950a", + "d8e125c6cdce6415", + "58e780945f62a119", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "d8a200104ac5e71d", + "58fe10d2c9df54e4", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "58fe10d2c9df54e4", + "d8ee23432acd4788" + ], + "pivots": [ + 1, + 2, + -1, + -1, + -5, + -5 + ], + "kb": 6, + "info": 0 + }, + { + "name": "dense-huge-scale-6-L", + "n": 6, + "nb": 6, + "lower": true, + "input": [ + "58db6cb74a4b601e", + "58dbf1f64823c9e2", + "d8c218683ea77f8a", + "d8f04498293f7073", + "d8d69ec52376ecbd", + "d8f35353e4e41e62", + "58dbf1f64823c9e2", + "58de0986e2d2711b", + "58ecf98b44328889", + "58dadf68953454fd", + "58c16245e3bded9d", + "d8eab834eb10a139", + "d8c218683ea77f8a", + "58ecf98b44328889", + "d8dcdc524cca85ee", + "d8c9dfc5c9cb9658", + "58cd05f79af077d0", + "d8d765e9e92610e3", + "d8f04498293f7073", + "58dadf68953454fd", + "d8c9dfc5c9cb9658", + "d8d19525b345a7d9", + "d8e125c6cdce6415", + "58e780945f62a119", + "d8d69ec52376ecbd", + "58c16245e3bded9d", + "58cd05f79af077d0", + "d8e125c6cdce6415", + "d8a200104ac5e71d", + "58fe10d2c9df54e4", + "d8f35353e4e41e62", + "d8eab834eb10a139", + "d8d765e9e92610e3", + "58e780945f62a119", + "58fe10d2c9df54e4", + "d8ee23432acd4788" + ], + "a": [ + "58db6cb74a4b601e", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "d8f35353e4e41e62", + "d8ee23432acd4788", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "3fc532a953a60926", + "3fc6808113688b60", + "d8d73fbb4d06692e", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "bfefb1c35e62c112", + "3fdf62bde99f5d32", + "58ef5ba69154c57a", + "58aef227b5a30066", + "7ff8000000000abc", + "7ff8000000000abc", + "bff65b9db2b5ee47", + "bfca0012c9053d68", + "3fe27d2b3989785b", + "3fc587834e8a436a", + "d8fd1b0196791e84", + "7ff8000000000abc", + "3fe864d0f954236f", + "bfb74fbcae922f62", + "3ff44d741e375eb6", + "3fd377b006dacaf9", + "3ff0efc4c129b67c", + "58fd1ee899e2073a" + ], + "w": [ + "58db6cb74a4b601e", + "d8f35353e4e41e62", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "d8f35353e4e41e62", + "d8ee23432acd4788", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "d8c218683ea77f8a", + "d8d765e9e92610e3", + "d8d73fbb4d06692e", + "58ef5ba69154c57a", + "7ff8000000000abc", + "7ff8000000000abc", + "58dbf1f64823c9e2", + "d8eab834eb10a139", + "58ef5ba69154c57a", + "58aef227b5a30066", + "7ff8000000000abc", + "7ff8000000000abc", + "d8f04498293f7073", + "58e780945f62a119", + "d8c4d902ae3c2ca7", + "58f4307c86c2ab44", + "d8fd1b0196791e84", + "d8fecf2ae865e758", + "d8d69ec52376ecbd", + "58fe10d2c9df54e4", + "d8a7128b2a56771a", + "58e2717dea792b9e", + "d8fecf2ae865e758", + "58fd1ee899e2073a" + ], + "pivots": [ + -6, + -6, + -6, + -6, + 6, + 6 + ], + "kb": 6, + "info": 0 + }, + { + "name": "dense-tiny-scale-3-U", + "n": 6, + "nb": 3, + "lower": false, + "input": [ + "2706dbc788f0d8f1", + "27074ad71ba29996", + "a6ee2a3d51a777fb", + "a71b1e64d3d3a068", + "a702da9e0789da79", + "a7201b9b485d232a", + "27074ad71ba29996", + "2709093c0afd25e2", + "271826894bdd94eb", + "270665ffd9def471", + "26ecfa9f044842a5", + "a71645531b43c23f", + "a6ee2a3d51a777fb", + "271826894bdd94eb", + "a7080e2de5b7a1ab", + "a6f590ed29e998ca", + "26f830e41d50553c", + "a703809a98557436", + "a71b1e64d3d3a068", + "270665ffd9def471", + "a6f590ed29e998ca", + "a6fd4f6dc18fad2c", + "a70c95c5fd2f9c63", + "271396d4769ce0e0", + "a702da9e0789da79", + "26ecfa9f044842a5", + "26f830e41d50553c", + "a70c95c5fd2f9c63", + "a6ce01a8a1a2bbdc", + "27290f50f16c8cac", + "a7201b9b485d232a", + "a71645531b43c23f", + "a703809a98557436", + "271396d4769ce0e0", + "27290f50f16c8cac", + "a7191eaf631d67ab" + ], + "a": [ + "a6e0bd75cfbf1c68", + "2703af4c7a9ef0c4", + "a6d3da52f2e76391", + "a720e5d22d872b1c", + "bfe7cf07710f6ee4", + "bfc9db7466341954", + "7ff8000000000abc", + "270ee590ef98452e", + "271b4591ae6826ed", + "26f02f1c8a7a0cc0", + "bfda5e13ccda1ba7", + "3fb0876d0ae94f19", + "7ff8000000000abc", + "7ff8000000000abc", + "a7041d48026b65f3", + "a70347c348f0ff38", + "bfc15322635c5e53", + "3fbe3e04ef00fea6", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "26dbe7036dfef11c", + "3fd00469efc83b55", + "bfd1f37a592f1d50", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "a6ce01a8a1a2bbdc", + "27290f50f16c8cac", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "a7191eaf631d67ab" + ], + "w": [ + "7ff8000000000abc", + "a702da9e0789da79", + "a7201b9b485d232a", + "7ff8000000000abc", + "26ecfa9f044842a5", + "a71645531b43c23f", + "7ff8000000000abc", + "26f830e41d50553c", + "a703809a98557436", + "7ff8000000000abc", + "a70c95c5fd2f9c63", + "271396d4769ce0e0", + "7ff8000000000abc", + "a6ce01a8a1a2bbdc", + "27290f50f16c8cac", + "7ff8000000000abc", + "27290f50f16c8cac", + "a7191eaf631d67ab" + ], + "pivots": [ + -987654, + -987654, + -987654, + -987654, + -5, + -5 + ], + "kb": 2, + "info": 0 + }, + { + "name": "dense-tiny-scale-3-L", + "n": 6, + "nb": 3, + "lower": true, + "input": [ + "2706dbc788f0d8f1", + "27074ad71ba29996", + "a6ee2a3d51a777fb", + "a71b1e64d3d3a068", + "a702da9e0789da79", + "a7201b9b485d232a", + "27074ad71ba29996", + "2709093c0afd25e2", + "271826894bdd94eb", + "270665ffd9def471", + "26ecfa9f044842a5", + "a71645531b43c23f", + "a6ee2a3d51a777fb", + "271826894bdd94eb", + "a7080e2de5b7a1ab", + "a6f590ed29e998ca", + "26f830e41d50553c", + "a703809a98557436", + "a71b1e64d3d3a068", + "270665ffd9def471", + "a6f590ed29e998ca", + "a6fd4f6dc18fad2c", + "a70c95c5fd2f9c63", + "271396d4769ce0e0", + "a702da9e0789da79", + "26ecfa9f044842a5", + "26f830e41d50553c", + "a70c95c5fd2f9c63", + "a6ce01a8a1a2bbdc", + "27290f50f16c8cac", + "a7201b9b485d232a", + "a71645531b43c23f", + "a703809a98557436", + "271396d4769ce0e0", + "27290f50f16c8cac", + "a7191eaf631d67ab" + ], + "a": [ + "2706dbc788f0d8f1", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "a7201b9b485d232a", + "a7191eaf631d67ab", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "3fc532a953a60925", + "3fc6808113688b5f", + "a70360c770aa93a4", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "bfefb1c35e62c111", + "3fdf62bde99f5d30", + "a6f1606869440d27", + "a725e59d661b768d", + "7ff8000000000abc", + "7ff8000000000abc", + "bff65b9db2b5ee47", + "bfca0012c9053d69", + "a6d33b1d60d7fc44", + "a7281aa7e0310286", + "a6ef70a24356e478", + "7ff8000000000abc", + "3fe864d0f954236f", + "bfb74fbcae922f63", + "271a230fb19a9dc0", + "2720d3f1590be271", + "270ebebe74809002", + "26d9cb216dc26e96" + ], + "w": [ + "2706dbc788f0d8f1", + "a7201b9b485d232a", + "7ff8000000000abc", + "a7201b9b485d232a", + "a7191eaf631d67ab", + "7ff8000000000abc", + "a6ee2a3d51a777fb", + "a703809a98557436", + "7ff8000000000abc", + "a71b1e64d3d3a068", + "271396d4769ce0e0", + "7ff8000000000abc", + "a702da9e0789da79", + "27290f50f16c8cac", + "7ff8000000000abc", + "27074ad71ba29996", + "a71645531b43c23f", + "7ff8000000000abc" + ], + "pivots": [ + -6, + -6, + -987654, + -987654, + -987654, + -987654 + ], + "kb": 2, + "info": 0 + }, + { + "name": "dense-tiny-scale-6-U", + "n": 6, + "nb": 6, + "lower": false, + "input": [ + "2706dbc788f0d8f1", + "27074ad71ba29996", + "a6ee2a3d51a777fb", + "a71b1e64d3d3a068", + "a702da9e0789da79", + "a7201b9b485d232a", + "27074ad71ba29996", + "2709093c0afd25e2", + "271826894bdd94eb", + "270665ffd9def471", + "26ecfa9f044842a5", + "a71645531b43c23f", + "a6ee2a3d51a777fb", + "271826894bdd94eb", + "a7080e2de5b7a1ab", + "a6f590ed29e998ca", + "26f830e41d50553c", + "a703809a98557436", + "a71b1e64d3d3a068", + "270665ffd9def471", + "a6f590ed29e998ca", + "a6fd4f6dc18fad2c", + "a70c95c5fd2f9c63", + "271396d4769ce0e0", + "a702da9e0789da79", + "26ecfa9f044842a5", + "26f830e41d50553c", + "a70c95c5fd2f9c63", + "a6ce01a8a1a2bbdc", + "27290f50f16c8cac", + "a7201b9b485d232a", + "a71645531b43c23f", + "a703809a98557436", + "271396d4769ce0e0", + "27290f50f16c8cac", + "a7191eaf631d67ab" + ], + "a": [ + "a7255866c6eadac4", + "3ff5c5950e52503b", + "3fd25198154a0813", + "3f9372c8c61195d2", + "bfe7cf07710f6ee4", + "bfc9db7466341954", + "7ff8000000000abc", + "2711ea428a85f740", + "bfc1316052ca9ec8", + "bfd21b5005e34cf3", + "bfda5e13ccda1ba7", + "3fb0876d0ae94f19", + "7ff8000000000abc", + "7ff8000000000abc", + "a6e0bd75cfbf1c68", + "a720e5d22d872b1c", + "bfc15322635c5e53", + "3fbe3e04ef00fea6", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "26dbe7036dfef11c", + "3fd00469efc83b55", + "bfd1f37a592f1d50", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "a6ce01a8a1a2bbdc", + "27290f50f16c8cac", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "a7191eaf631d67ab" + ], + "w": [ + "a7255866c6eadac4", + "271860b28eae349b", + "a6d3da52f2e7638e", + "a70347c348f0ff38", + "26f830e41d50553c", + "a703809a98557436", + "7ff8000000000abc", + "2711ea428a85f740", + "2703af4c7a9ef0c3", + "26f02f1c8a7a0cc0", + "26ecfa9f044842a5", + "a71645531b43c23f", + "7ff8000000000abc", + "7ff8000000000abc", + "a6e0bd75cfbf1c68", + "a720e5d22d872b1c", + "a702da9e0789da79", + "a7201b9b485d232a", + "7ff8000000000abc", + "7ff8000000000abc", + "a720e5d22d872b1c", + "26dbe7036dfef11c", + "a70c95c5fd2f9c63", + "271396d4769ce0e0", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "a6ce01a8a1a2bbdc", + "27290f50f16c8cac", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "27290f50f16c8cac", + "a7191eaf631d67ab" + ], + "pivots": [ + 1, + 2, + -1, + -1, + -5, + -5 + ], + "kb": 6, + "info": 0 + }, + { + "name": "dense-tiny-scale-6-L", + "n": 6, + "nb": 6, + "lower": true, + "input": [ + "2706dbc788f0d8f1", + "27074ad71ba29996", + "a6ee2a3d51a777fb", + "a71b1e64d3d3a068", + "a702da9e0789da79", + "a7201b9b485d232a", + "27074ad71ba29996", + "2709093c0afd25e2", + "271826894bdd94eb", + "270665ffd9def471", + "26ecfa9f044842a5", + "a71645531b43c23f", + "a6ee2a3d51a777fb", + "271826894bdd94eb", + "a7080e2de5b7a1ab", + "a6f590ed29e998ca", + "26f830e41d50553c", + "a703809a98557436", + "a71b1e64d3d3a068", + "270665ffd9def471", + "a6f590ed29e998ca", + "a6fd4f6dc18fad2c", + "a70c95c5fd2f9c63", + "271396d4769ce0e0", + "a702da9e0789da79", + "26ecfa9f044842a5", + "26f830e41d50553c", + "a70c95c5fd2f9c63", + "a6ce01a8a1a2bbdc", + "27290f50f16c8cac", + "a7201b9b485d232a", + "a71645531b43c23f", + "a703809a98557436", + "271396d4769ce0e0", + "27290f50f16c8cac", + "a7191eaf631d67ab" + ], + "a": [ + "2706dbc788f0d8f1", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "a7201b9b485d232a", + "a7191eaf631d67ab", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "3fc532a953a60925", + "3fc6808113688b5f", + "a70360c770aa93a4", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "bfefb1c35e62c111", + "3fdf62bde99f5d30", + "271a230fb19a9dc0", + "26d9cb216dc26e96", + "7ff8000000000abc", + "7ff8000000000abc", + "bff65b9db2b5ee47", + "bfca0012c9053d69", + "3fe27d2b3989785a", + "3fc587834e8a4368", + "a728426d5736f988", + "7ff8000000000abc", + "3fe864d0f954236f", + "bfb74fbcae922f63", + "3ff44d741e375eb6", + "3fd377b006dacaf7", + "3ff0efc4c129b67d", + "272845ae052467ed" + ], + "w": [ + "2706dbc788f0d8f1", + "a7201b9b485d232a", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "a7201b9b485d232a", + "a7191eaf631d67ab", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "7ff8000000000abc", + "a6ee2a3d51a777fb", + "a703809a98557436", + "a70360c770aa93a4", + "271a230fb19a9dc0", + "7ff8000000000abc", + "7ff8000000000abc", + "27074ad71ba29996", + "a71645531b43c23f", + "271a230fb19a9dc0", + "26d9cb216dc26e96", + "7ff8000000000abc", + "7ff8000000000abc", + "a71b1e64d3d3a068", + "271396d4769ce0e0", + "a6f1606869440d27", + "2720d3f1590be271", + "a728426d5736f988", + "a729adf7eb19b0ef", + "a702da9e0789da79", + "27290f50f16c8cac", + "a6d33b1d60d7fc44", + "270ebebe74809002", + "a729adf7eb19b0ef", + "272845ae052467ed" + ], + "pivots": [ + -6, + -6, + -6, + -6, + 6, + 6 + ], + "kb": 6, + "info": 0 + }, + { + "name": "pivot-threshold-below-2-U", + "n": 2, + "nb": 2, + "lower": false, + "input": [ + "3fe47e0f66afed06", + "3ff0000000000000", + "3ff0000000000000", + "3fe47e0f66afed06" + ], + "a": [ + "3fe47e0f66afed06", + "3ff0000000000000", + "7ff8000000000abc", + "3fe47e0f66afed06" + ], + "w": [ + "3fe47e0f66afed06", + "3ff0000000000000", + "3ff0000000000000", + "3fe47e0f66afed06" + ], + "pivots": [ + -1, + -1 + ], + "kb": 2, + "info": 0 + }, + { + "name": "pivot-threshold-below-2-L", + "n": 2, + "nb": 2, + "lower": true, + "input": [ + "3fe47e0f66afed06", + "3ff0000000000000", + "3ff0000000000000", + "3fe47e0f66afed06" + ], + "a": [ + "3fe47e0f66afed06", + "7ff8000000000abc", + "3ff0000000000000", + "3fe47e0f66afed06" + ], + "w": [ + "3fe47e0f66afed06", + "3ff0000000000000", + "3ff0000000000000", + "3fe47e0f66afed06" + ], + "pivots": [ + -2, + -2 + ], + "kb": 2, + "info": 0 + }, + { + "name": "pivot-threshold-exact-2-U", + "n": 2, + "nb": 2, + "lower": false, + "input": [ + "3fe47e0f66afed07", + "3ff0000000000000", + "3ff0000000000000", + "3fe47e0f66afed07" + ], + "a": [ + "bfed7a2e340fc715", + "3ff8fc1ecd5fda0e", + "7ff8000000000abc", + "3fe47e0f66afed07" + ], + "w": [ + "bfed7a2e340fc715", + "3ff0000000000000", + "7ff8000000000abc", + "3fe47e0f66afed07" + ], + "pivots": [ + 1, + 2 + ], + "kb": 2, + "info": 0 + }, + { + "name": "pivot-threshold-exact-2-L", + "n": 2, + "nb": 2, + "lower": true, + "input": [ + "3fe47e0f66afed07", + "3ff0000000000000", + "3ff0000000000000", + "3fe47e0f66afed07" + ], + "a": [ + "3fe47e0f66afed07", + "7ff8000000000abc", + "3ff8fc1ecd5fda0e", + "bfed7a2e340fc715" + ], + "w": [ + "3fe47e0f66afed07", + "7ff8000000000abc", + "3ff0000000000000", + "bfed7a2e340fc715" + ], + "pivots": [ + 1, + 2 + ], + "kb": 2, + "info": 0 + }, + { + "name": "pivot-threshold-above-2-U", + "n": 2, + "nb": 2, + "lower": false, + "input": [ + "3fe47e0f66afed08", + "3ff0000000000000", + "3ff0000000000000", + "3fe47e0f66afed08" + ], + "a": [ + "bfed7a2e340fc712", + "3ff8fc1ecd5fda0d", + "7ff8000000000abc", + "3fe47e0f66afed08" + ], + "w": [ + "bfed7a2e340fc712", + "3ff0000000000000", + "7ff8000000000abc", + "3fe47e0f66afed08" + ], + "pivots": [ + 1, + 2 + ], + "kb": 2, + "info": 0 + }, + { + "name": "pivot-threshold-above-2-L", + "n": 2, + "nb": 2, + "lower": true, + "input": [ + "3fe47e0f66afed08", + "3ff0000000000000", + "3ff0000000000000", + "3fe47e0f66afed08" + ], + "a": [ + "3fe47e0f66afed08", + "7ff8000000000abc", + "3ff8fc1ecd5fda0d", + "bfed7a2e340fc712" + ], + "w": [ + "3fe47e0f66afed08", + "7ff8000000000abc", + "3ff0000000000000", + "bfed7a2e340fc712" + ], + "pivots": [ + 1, + 2 + ], + "kb": 2, + "info": 0 + } + ] +} diff --git a/lib/node_modules/@stdlib/lapack/base/dlasyf/test/test.js b/lib/node_modules/@stdlib/lapack/base/dlasyf/test/test.js new file mode 100644 index 000000000000..01ec5fb3b993 --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dlasyf/test/test.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 tape = require( 'tape' ); +var common = require( './common.js' ); +var main = require( './../lib/main.js' ); +var publicMain = require( './../lib' ); +tape('main export is a function', function test(t) { + t.ok( true, __filename ); + t.strictEqual(typeof publicMain, 'function'); + t.strictEqual(typeof publicMain.ndarray, 'function'); + t.end(); +}); +tape('pure JavaScript agrees with unchanged finite reference panels', function test(t) { + common.corpus(t, main); + t.end(); +}); +tape('public dispatch agrees with unchanged reference panels', function test(t) { + common.corpus(t, publicMain); + t.end(); +}); +tape('large diagonal factors preserve mathematical identity and unroll-boundary data', function test(t) { + common.diagonal(t, main); + common.diagonal(t, publicMain); + t.end(); +}); diff --git a/lib/node_modules/@stdlib/lapack/base/dlasyf/test/test.native.js b/lib/node_modules/@stdlib/lapack/base/dlasyf/test/test.native.js new file mode 100644 index 000000000000..9ad6c2b6003e --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dlasyf/test/test.native.js @@ -0,0 +1,202 @@ +/** +* @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 common = require( './common.js' ); +var factory = require( './../lib/factory.js' ); +var base = require( './../lib/base.js' ); +var eligibility = require( './../lib/can_use_native.js' ); +var native = tryRequire(resolve(__dirname, './../lib/native.js')); +var addon = tryRequire(resolve(__dirname, './../src/addon.node')); +var opts = { + 'skip': (native instanceof Error) +}; +tape('main export is a function', opts, function test(t) { + t.ok( true, __filename ); + t.strictEqual(typeof addon, 'function'); + t.strictEqual(require( './../lib' ), native, 'public native route'); + t.end(); +}); +tape('actual native panels preserve reference bits, guards and partial pivots', opts, function test(t) { + common.corpus(t, native); + common.diagonal(t, native); + t.end(); +}); +tape('native eligibility bounds complete indexed sums and helper poststeps', function test(t) { + var calls; + var args; + var fn; + var k; + var a; + var w; + var p; + args = [ + 121, + 2, + 2, + null, + 0, + null, + 1500000000, + 1000000000, + 0, + null, + 1, + 0, + null, + 1, + 2, + 0 + ]; + t.strictEqual(eligibility(args), false, 'full A corner exceeds conservative native domain'); + args = [ + 121, + 1, + 2, + null, + 0, + null, + 2147483640, + 1, + 0, + null, + 1, + 0, + null, + 1, + 1, + 0 + ]; + t.strictEqual(eligibility(args), false, 'unused singleton stride still respects helper width domain'); + t.strictEqual(eligibility([ + 121, + 0, + 2147483647, + null, + 0 + ]), false, 'wide valid empty NB uses JS'); + calls = 0; + fn = factory(function dispatch() { + if (eligibility(arguments)) { + calls += 1; + } + return base.apply(null, arguments); + }); + k = new Int32Array(1); + a = new Float64Array([3]); + p = new Int32Array(1); + w = new Float64Array(2); + t.strictEqual(fn.ndarray('lower', 1, 2, k, 0, a, 2147483647, 2147483647, 0, p, 1, 0, w, 2147483647, 1, 0), 0, 'wide valid JS singleton'); + t.strictEqual(calls, 0, 'safe explicit fallback'); + t.strictEqual(k[0], 1); + t.strictEqual(p[0], 1); + t.end(); +}); +tape('raw bridge rejects invalid metadata and overlapping tiny views before writes', opts, function test(t) { + var slots; + var args; + var old; + var a; + var w; + var k; + var p; + var i; + a = new Float64Array([ + 0, + 4, + 4, + 0 + ]); + w = new Float64Array(4); + k = new Int32Array([99]); + p = new Int32Array([ + 12, + 13 + ]); + args = [ + 122, + 2, + 2, + k, + 0, + a, + 1, + 2, + 0, + p, + 1, + 0, + w, + 1, + 2, + 0 + ]; + slots = [ + 1, + 2, + 4, + 6, + 7, + 8, + 10, + 11, + 13, + 14, + 15 + ]; + for (i = 0; (i < slots.length); i++) { + old = args[slots[i]]; + args[slots[i]] = 0.5; + t.throws(function call() { + addon.apply(null, args); + }, RangeError, 'integral metadata'); + args[slots[i]] = old; + } + args[6] = 0; + args[7] = 0; + t.throws(function call() { + addon.apply(null, args); + }, RangeError, 'tiny broadcast matrix rejected before staging'); + args[6] = 1; + args[7] = 2; + args[12] = a; + t.throws(function call() { + addon.apply(null, args); + }, RangeError, 'physical factor/scratch overlap'); + args[12] = w; + t.deepEqual(a, new Float64Array([ + 0, + 4, + 4, + 0 + ])); + t.deepEqual(k, new Int32Array([99])); + t.deepEqual(p, new Int32Array([ + 12, + 13 + ])); + t.deepEqual(w, new Float64Array(4)); + t.strictEqual(addon(121, 0, 2, k, 0, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined), 0, 'raw safe empty ignores inactive metadata'); + t.strictEqual(k[0], 0); + t.end(); +}); diff --git a/lib/node_modules/@stdlib/lapack/base/dlasyf/test/test_api.js b/lib/node_modules/@stdlib/lapack/base/dlasyf/test/test_api.js new file mode 100644 index 000000000000..6a3cab387e3a --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dlasyf/test/test_api.js @@ -0,0 +1,255 @@ +/** +* @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 getGlobal = require( '@stdlib/utils/global' ); +var main = require( './../lib/main.js' ); +var publicMain = require( './../lib' ); + +/** +* Supplies a valid independent lower 2x2 panel. +* @param {*} fn - argument +* @param {*} a - argument +* @param {*} k - argument +* @param {*} p - argument +* @param {*} w - argument +* @returns {integer} INFO +*/ +function valid(fn, a, k, p, w) { + return fn.ndarray('lower', 2, 2, k, 0, a, 1, 2, 0, p, 1, 0, w, 1, 2, 0); +} +/** +* Ensures a rejected call has not changed any active storage. +* @param {*} t - argument +* @param {*} fn - argument +*/ +function unchanged(t, fn) { + var a; + var k; + var p; + var w; + a = new Float64Array([ + 0, + 4, + 4, + 0 + ]); + k = new Int32Array([91]); + p = new Int32Array([ + 12, + 13 + ]); + w = new Float64Array([ + 21, + 22, + 23, + 24 + ]); + t.throws(function call() { // eslint-disable-line no-loop-func + fn(a, k, p, w); + }); + t.deepEqual(a, new Float64Array([ + 0, + 4, + 4, + 0 + ]), 'no factor writes'); + t.deepEqual(k, new Int32Array([91]), 'no count write'); + t.deepEqual(p, new Int32Array([ + 12, + 13 + ]), 'no pivot writes'); + t.deepEqual(w, new Float64Array([ + 21, + 22, + 23, + 24 + ]), 'no scratch writes'); +} +tape('empty order initializes only the active count slot after scalar checks', function test(t) { + var trap; + var k; + var f; + var i; + k = new Int32Array([ + 9, + 8, + 7 + ]); + trap = {}; + Object.defineProperty(trap, 'length', { + 'get': function get() { + throw new Error('inactive length accessed'); + } + }); + for (i = 0; (i < 2); i++) { + k = new Int32Array([ + 9, + 8, + 7 + ]); + f = ( (i === 0) ) ? main : publicMain; + t.strictEqual(f.ndarray('lower', 0, 2147483647, k, 1, trap, NaN, Infinity, undefined, trap, NaN, NaN, trap, NaN, NaN, NaN), 0, 'new safe-empty status'); + t.deepEqual(k, new Int32Array([ + 9, + 0, + 7 + ]), 'only KB slot changed'); + t.strictEqual(f(102, 121, 0, 2, k, trap, 1, trap, trap, 1), 0, 'numeric selectors accepted'); + t.throws(function call() { // eslint-disable-line no-loop-func + f('column-major', 'upper', 0, 1, k, trap, 1, trap, trap, 1); + }, RangeError, 'NB validated before KB write'); + t.throws(function call() { // eslint-disable-line no-loop-func + f.ndarray('lower', 2147483648, 2, undefined, 0, undefined, 1, 2, 0, undefined, 1, 0, undefined, 1, 2, 0); + }, RangeError, 'N cap before buffers'); + t.throws(function call() { // eslint-disable-line no-loop-func + f('column-major', 'upper', 0, 2, undefined, trap, 0, trap, trap, 1); + }, RangeError, 'main LDA before buffer access'); + } + t.end(); +}); +tape('invalid dtype, geometry and alias calls reject before all writes', function test(t) { + unchanged(t, function call(a, k, p, w) { + return main.ndarray('lower', 2, 2, k, 0, a, 1, 1, 0, p, 1, 0, w, 1, 2, 0); + }); + unchanged(t, function call(a, k, p, w) { + return main.ndarray('lower', 2, 2, k, 0, a, 1, 2, 0, p, 0, 0, w, 1, 2, 0); + }); + unchanged(t, function call(a, k, p, w) { + return main.ndarray('lower', 2, 2, k, 0, a, 1, 2, -1, p, 1, 0, w, 1, 2, 0); + }); + unchanged(t, function call(a, k, p) { + return valid(main, a, k, p, a); + }); + unchanged(t, function call(a, k, p, w) { + return main.ndarray('lower', 2, 2, k, 0, a, 1, 2, 0, new Float64Array(2), 1, 0, w, 1, 2, 0); + }); + unchanged(t, function call(a, k, p, w) { + return main.ndarray('lower', 2, 2, k, 0, a, 1, 2, 0, p, 1, 0, w, 0, 2, 0); + }); + t.end(); +}); +tape('ordinary signed equal-negative pivots and singular INFO are produced', function test(t) { + var a; + var k; + var p; + var w; + a = new Float64Array([ + 0, + 4, + 4, + 0 + ]); + k = new Int32Array(1); + p = new Int32Array([ + 123, + 456 + ]); + w = new Float64Array(4); + t.strictEqual(valid(main, a, k, p, w), 0); + t.strictEqual(k[0], 2); + t.deepEqual(p, new Int32Array([ + -2, + -2 + ]), 'ordinary equal negative pair, not rook'); + a = new Float64Array([0]); + p = new Int32Array([123]); + w = new Float64Array(2); + t.strictEqual(main('column-major', 'upper', 1, 2, k, a, 1, p, w, 1), 1, 'positive one-based singular position returned'); + t.strictEqual(k[0], 1, 'singular panel still completed'); + t.deepEqual(p, new Int32Array([1])); + t.end(); +}); +tape('captured intrinsic view metadata ignores untrusted own accessors', function test(t) { + var reads; + var names; + var a; + var k; + var p; + var w; + var i; + a = new Float64Array([ + 0, + 4, + 4, + 0 + ]); + k = new Int32Array(1); + p = new Int32Array(2); + w = new Float64Array(4); + reads = 0; + names = [ + 'length', + 'buffer', + 'byteOffset', + 'byteLength' + ]; + for (i = 0; (i < names.length); i++) { + Object.defineProperty(a, names[i], { + 'get': function get() { // eslint-disable-line no-loop-func + reads += 1; + throw new Error('untrusted metadata'); + } + }); + } + t.strictEqual(valid(publicMain, a, k, p, w), 0); + t.strictEqual(reads, 0); + t.deepEqual(p, new Int32Array([ + -2, + -2 + ])); + t.end(); +}); +tape('SharedArrayBuffer storage is rejected without mutation', { + 'skip': (SharedArrayBuffer === null) +}, function test(t) { + var clone; + var b; + var a; + var k; + var p; + var w; + b = new SharedArrayBuffer(128); + clone = getGlobal().structuredClone; + b = ( clone ) ? clone(b) : b; + a = new Float64Array(b, 0, 4); + k = new Int32Array(1); + p = new Int32Array(2); + w = new Float64Array(4); + a.set([ + 0, + 4, + 4, + 0 + ]); + t.throws(function call() { // eslint-disable-line no-loop-func + valid(publicMain, a, k, p, w); + }, TypeError); + t.deepEqual(a, new Float64Array([ + 0, + 4, + 4, + 0 + ])); + t.deepEqual(k, new Int32Array([0])); + t.end(); +});