diff --git a/lib/node_modules/@stdlib/math/base/special/hyp2f1/README.md b/lib/node_modules/@stdlib/math/base/special/hyp2f1/README.md new file mode 100644 index 000000000000..d041ea732e03 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/hyp2f1/README.md @@ -0,0 +1,140 @@ + + +# Gaussian hypergeometric function + +> Evaluates the [Gaussian hypergeometric function][hypergeometric-function]. + +
+ +The [Gaussian hypergeometric function][hypergeometric-function] is defined for `|x| < 1` by the power series: + + + +```math +{}_2F_1(a, b; c; x) = \sum_{n=0}^{\infty} \frac{(a)_n (b)_n}{(c)_n} \frac{x^n}{n!} = 1 + \frac{a b}{c} x + \frac{a(a+1) b(b+1)}{c(c+1)} \frac{x^2}{2!} + \frac{a(a+1)(a+2) b(b+1)(b+2)}{c(c+1)(c+2)} \frac{x^3}{3!} + \cdots +``` + + + + + +and is undefined (or infinite) if `c` equals a non-positive integer. + +Here `(q)ₙ` is the (rising) [Pochhammer symbol][pochhammer-symbol], which is defined by: + + + +```math +(q)_n = \begin{cases} 1 & n = 0 \\ q(q+1) \cdots (q+n-1) & n > 0 \end{cases} +``` + + + + + +For `|x| >= 1`, the function can be [analytically continued][analytic-continuation] using functional identities and transformation formulas. + +
+ + + +
+ +## Usage + +```javascript +var hyp2f1 = require( '@stdlib/math/base/special/hyp2f1' ); +``` + +#### hyp2f1( a, b, c, x ) + +Evaluates the [Gaussian hypergeometric function][hypergeometric-function]. + +```javascript +var v = hyp2f1( 1.0, 1.0, 1.0, 0.0 ); +// returns 1.0 + +v = hyp2f1( 10.0, 7.4, -1.8, -0.99 ); +// returns ~0.423 + +v = hyp2f1( 3.0, 4.0, 7.0, 1.0 ); +// returns +Infinity + +v = hyp2f1( NaN, 3.0, 2.0, 0.5 ); +// returns NaN +``` + +
+ + + +
+ +## Examples + + + +```javascript +var linspace = require( '@stdlib/array/base/linspace' ); +var hyp2f1 = require( '@stdlib/math/base/special/hyp2f1' ); + +var a = linspace( -50.0, 50.0, 100 ); +var b = linspace( -50.0, 50.0, 100 ); +var c = linspace( -50.0, 50.0, 100 ); +var x = linspace( -50.0, 50.0, 100 ); + +var i; +for ( i = 0; i < x.length; i++ ) { + console.log( 'a: %d, b: %d, c: %d, x: %d, 2F1(a,b;c;x): %d', a[ i ], b[ i ], c[ i ], x[ i ], hyp2f1( a[ i ], b[ i ], c[ i ], x[ i ] ) ); +} +``` + +
+ + + + + + + + + + + + + + diff --git a/lib/node_modules/@stdlib/math/base/special/hyp2f1/benchmark/benchmark.js b/lib/node_modules/@stdlib/math/base/special/hyp2f1/benchmark/benchmark.js new file mode 100644 index 000000000000..d2abf5406cff --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/hyp2f1/benchmark/benchmark.js @@ -0,0 +1,59 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2025 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 uniform = require( '@stdlib/random/array/uniform' ); +var isnan = require( '@stdlib/math/base/assert/is-nan' ); +var pkg = require( './../package.json' ).name; +var hyp2f1 = require( './../lib' ); + + +// MAIN // + +bench( pkg, function benchmark( bm ) { + var x; + var a; + var b; + var c; + var z; + var i; + + a = uniform( 100, -50.0, 50.0 ); + b = uniform( 100, -50.0, 50.0 ); + c = uniform( 100, -50.0, 50.0 ); + x = uniform( 100, -50.0, 50.0 ); + + bm.tic(); + for ( i = 0; i < bm.iterations; i++ ) { + // eslint-disable-next-line max-len + z = hyp2f1( a[ i % x.length ], b[ i % x.length ], c[ i % x.length ], x[ i % x.length ] ); + if ( isnan( z ) ) { + bm.fail( 'should not return NaN' ); + } + } + bm.toc(); + if ( isnan( z ) ) { + bm.fail( 'should not return NaN' ); + } + bm.pass( 'benchmark finished' ); + bm.end(); +}); diff --git a/lib/node_modules/@stdlib/math/base/special/hyp2f1/docs/img/equation_hypergeometric_function.svg b/lib/node_modules/@stdlib/math/base/special/hyp2f1/docs/img/equation_hypergeometric_function.svg new file mode 100644 index 000000000000..f9a9b263b15e --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/hyp2f1/docs/img/equation_hypergeometric_function.svg @@ -0,0 +1,208 @@ + +Subscript 2 Baseline upper F 1 left-parenthesis a comma b semicolon c semicolon x right-parenthesis equals sigma-summation Underscript n equals 0 Overscript normal infinity Endscripts StartFraction left-parenthesis a right-parenthesis Subscript n Baseline left-parenthesis b right-parenthesis Subscript n Baseline Over left-parenthesis c right-parenthesis Subscript n Baseline EndFraction StartFraction x Superscript n Baseline Over n factorial EndFraction equals 1 plus StartFraction a b Over c EndFraction x plus StartFraction a left-parenthesis a plus 1 right-parenthesis b left-parenthesis b plus 1 right-parenthesis Over c left-parenthesis c plus 1 right-parenthesis EndFraction StartFraction x squared Over 2 factorial EndFraction plus StartFraction a left-parenthesis a plus 1 right-parenthesis left-parenthesis a plus 2 right-parenthesis b left-parenthesis b plus 1 right-parenthesis left-parenthesis b plus 2 right-parenthesis Over c left-parenthesis c plus 1 right-parenthesis left-parenthesis c plus 2 right-parenthesis EndFraction StartFraction x cubed Over 3 factorial EndFraction plus midline-horizontal-ellipsis + + + \ No newline at end of file diff --git a/lib/node_modules/@stdlib/math/base/special/hyp2f1/docs/img/equation_pochhammer_symbol.svg b/lib/node_modules/@stdlib/math/base/special/hyp2f1/docs/img/equation_pochhammer_symbol.svg new file mode 100644 index 000000000000..aaf8b08bab18 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/hyp2f1/docs/img/equation_pochhammer_symbol.svg @@ -0,0 +1,63 @@ + +left-parenthesis q right-parenthesis Subscript n Baseline equals StartLayout Enlarged left-brace 1st Row 1st Column 1 2nd Column n equals 0 2nd Row 1st Column q left-parenthesis q plus 1 right-parenthesis midline-horizontal-ellipsis left-parenthesis q plus n minus 1 right-parenthesis 2nd Column n greater-than 0 EndLayout + + + \ No newline at end of file diff --git a/lib/node_modules/@stdlib/math/base/special/hyp2f1/docs/repl.txt b/lib/node_modules/@stdlib/math/base/special/hyp2f1/docs/repl.txt new file mode 100644 index 000000000000..a8f20d2304e6 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/hyp2f1/docs/repl.txt @@ -0,0 +1,40 @@ + +{{alias}}( a, b, c, x ) + Evaluates the Gaussian hypergeometric function. + + Parameters + ---------- + a: number + Input value. + b: number + Input value. + c: number + Input value. + x: number + Input value. + + Returns + ------- + y: number + Function value. + + Examples + -------- + > var y = {{alias}}( 1.0, 1.0, 1.0, 0.0 ) + 1.0 + > y = {{alias}}( 10.0, 7.4, -1.8, -0.99 ) + ~0.423 + > y = {{alias}}( 10.0, 1.0, -1.8, -0.99 ) + ~-0.875 + > y = {{alias}}( 2.0, 3.0, 5.0, 0.99 ) + ~27.699 + > y = {{alias}}( 3.0, 4.0, 7.0, 1.0 ) + +Infinity + > y = {{alias}}( NaN, 3.0, 2.0, 0.5 ) + NaN + > y = {{alias}}( 1.0, NaN, 2.0, 0.5 ) + NaN + + See Also + -------- + diff --git a/lib/node_modules/@stdlib/math/base/special/hyp2f1/docs/types/index.d.ts b/lib/node_modules/@stdlib/math/base/special/hyp2f1/docs/types/index.d.ts new file mode 100644 index 000000000000..bc901412f3d5 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/hyp2f1/docs/types/index.d.ts @@ -0,0 +1,63 @@ +/* +* @license Apache-2.0 +* +* Copyright (c) 2025 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 + +/** +* Evaluates the Gaussian hypergeometric function. +* +* @param a - input value +* @param b - input value +* @param c - input value +* @param x - input value +* @returns function value +* +* @example +* var v = hyp2f1( 1.0, 1.0, 1.0, 0.0 ); +* // returns 1.0 +* +* @example +* var v = hyp2f1( 10.0, 7.4, -1.8, -0.99 ); +* // returns ~0.423 +* +* @example +* var v = hyp2f1( 10.0, 1.0, -1.8, -0.99 ); +* // returns ~-0.875 +* +* @example +* var v = hyp2f1( 2.0, 3.0, 5.0, 0.99 ); +* // returns ~27.699 +* +* @example +* var v = hyp2f1( 3.0, 4.0, 7.0, 1.0 ); +* // returns +Infinity +* +* @example +* var v = hyp2f1( NaN, 3.0, 2.0, 0.5 ); +* // returns NaN +* +* @example +* var v = hyp2f1( 1.0, NaN, 2.0, 0.5 ); +* // returns NaN +*/ +declare function hyp2f1( a: number, b: number, c: number, x: number ): number; + + +// EXPORTS // + +export = hyp2f1; diff --git a/lib/node_modules/@stdlib/math/base/special/hyp2f1/docs/types/test.ts b/lib/node_modules/@stdlib/math/base/special/hyp2f1/docs/types/test.ts new file mode 100644 index 000000000000..086f16297485 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/hyp2f1/docs/types/test.ts @@ -0,0 +1,76 @@ +/* +* @license Apache-2.0 +* +* Copyright (c) 2025 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 hyp2f1 = require( './index' ); + + +// TESTS // + +// The function returns a number... +{ + hyp2f1( 1.0, 1.0, 1.0, 0.0 ); // $ExpectType number + hyp2f1( 10.0, 7.4, -1.8, -0.99 ); // $ExpectType number + hyp2f1( 10.0, 1.0, -1.8, -0.99 ); // $ExpectType number + hyp2f1( 2.0, 3.0, 5.0, 0.99 ); // $ExpectType number +} + +// The compiler throws an error if the function is provided a first argument which is a not a number... +{ + hyp2f1( true, 1.0, 1.0, 0.0 ); // $ExpectError + hyp2f1( false, 7.4, -1.8, -0.99 ); // $ExpectError + hyp2f1( '5', 1.0, -1.8, -0.99 ); // $ExpectError + hyp2f1( [], 3.0, 5.0, 0.99 ); // $ExpectError + hyp2f1( {}, 3.0, 5.0, 0.99 ); // $ExpectError + hyp2f1( ( x: number ): number => x, 1.0, 1.0, 0.0 ); // $ExpectError +} + +// The compiler throws an error if the function is provided a second argument which is a not a number... +{ + hyp2f1( 1.0, true, 1.0, 0.0 ); // $ExpectError + hyp2f1( 7.4, false, -1.8, -0.99 ); // $ExpectError + hyp2f1( 1.0, '5', -1.8, -0.99 ); // $ExpectError + hyp2f1( 3.0, [], 5.0, 0.99 ); // $ExpectError + hyp2f1( 3.0, {}, 5.0, 0.99 ); // $ExpectError + hyp2f1( 1.0, ( x: number ): number => x, 1.0, 0.0 ); // $ExpectError +} + +// The compiler throws an error if the function is provided a third argument which is a not a number... +{ + hyp2f1( 1.0, 1.0, true, 0.0 ); // $ExpectError + hyp2f1( 7.4, -1.8, false, -0.99 ); // $ExpectError + hyp2f1( 1.0, -1.8, '5', -0.99 ); // $ExpectError + hyp2f1( 3.0, 5.0, [], 0.99 ); // $ExpectError + hyp2f1( 3.0, 5.0, {}, 0.99 ); // $ExpectError + hyp2f1( 1.0, 1.0, ( x: number ): number => x, 0.0 ); // $ExpectError +} + +// The compiler throws an error if the function is provided a fourth argument which is a not a number... +{ + hyp2f1( 1.0, 1.0, 0.0, true ); // $ExpectError + hyp2f1( 7.4, -1.8, -0.99, false ); // $ExpectError + hyp2f1( 1.0, -1.8, -0.99, '5' ); // $ExpectError + hyp2f1( 3.0, 5.0, 0.99, [] ); // $ExpectError + hyp2f1( 3.0, 5.0, 0.99, {} ); // $ExpectError + hyp2f1( 1.0, 1.0, 0.0, ( x: number ): number => x ); // $ExpectError +} + +// The compiler throws an error if the function is provided an invalid number of arguments... +{ + hyp2f1(); // $ExpectError + hyp2f1( 2.0, 3.0, 5.0 ); // $ExpectError +} diff --git a/lib/node_modules/@stdlib/math/base/special/hyp2f1/examples/index.js b/lib/node_modules/@stdlib/math/base/special/hyp2f1/examples/index.js new file mode 100644 index 000000000000..a666b43d65e3 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/hyp2f1/examples/index.js @@ -0,0 +1,32 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2025 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 linspace = require( '@stdlib/array/base/linspace' ); +var hyp2f1 = require( './../lib' ); + +var a = linspace( -50.0, 50.0, 100 ); +var b = linspace( -50.0, 50.0, 100 ); +var c = linspace( -50.0, 50.0, 100 ); +var x = linspace( -50.0, 50.0, 100 ); + +var i; +for ( i = 0; i < x.length; i++ ) { + console.log( 'a: %d, b: %d, c: %d, x: %d, 2F1(a,b;c;x): %d', a[ i ], b[ i ], c[ i ], x[ i ], hyp2f1( a[ i ], b[ i ], c[ i ], x[ i ] ) ); +} diff --git a/lib/node_modules/@stdlib/math/base/special/hyp2f1/lib/config.json b/lib/node_modules/@stdlib/math/base/special/hyp2f1/lib/config.json new file mode 100644 index 000000000000..25be968b2a4e --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/hyp2f1/lib/config.json @@ -0,0 +1,6 @@ +{ + "MACHEP": 1.11022302462515654042e-16, + "EPS": 1.0e-13, + "ETHRESH": 1.0e-12, + "MAX_ITERATIONS": 10000 +} diff --git a/lib/node_modules/@stdlib/math/base/special/hyp2f1/lib/hys2f1.js b/lib/node_modules/@stdlib/math/base/special/hyp2f1/lib/hys2f1.js new file mode 100644 index 000000000000..ec8ced0d0691 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/hyp2f1/lib/hys2f1.js @@ -0,0 +1,239 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2025 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. +* +* +* ## Notice +* +* The original C code and copyright notice are from the [Cephes Mathematical Library]{@link https://www.netlib.org/cephes/}. The implementation has been modified for JavaScript. +* +* ```text +* (C) Copyright Stephen L. Moshier 1984, 1987, 1992, 2000. +* +* Use, modification and distribution are subject to the +* Cephes Mathematical Library License. (See accompanying file +* LICENSE or copy at https://smath.com/en-US/view/CephesMathLibrary/license) +* ``` +*/ + +'use strict'; + +// MODULES // + +var PINF = require( '@stdlib/constants/float64/pinf' ); +var round = require( '@stdlib/math/base/special/round' ); +var abs = require( '@stdlib/math/base/special/abs' ); +var isNonPositiveInteger = require( './isnonpositiveinteger.js' ); +var config = require( './config.json' ); + + +// VARIABLES // + +var MACHEP = config.MACHEP; +var EPS = config.EPS; +var MAX_ITERATIONS = config.MAX_ITERATIONS; + + +// FUNCTIONS // + +/** +* Evaluates the Gaussian hypergeometric function by two-term recurrence in `a`. +* +* ## Notes +* +* - This function helps prevent losing accuracy in the highly alternating hypergeometric series and allows a and b to be reduced to smaller values. +* +* ## References +* +* - AMS55 #15.2.10 +* +* @private +* @param {number} a - input value +* @param {number} b - input value +* @param {number} c - input value +* @param {number} x - input value +* @param {number} loss - starting loss of significance +* @returns {Object} the function value and error +*/ +function hyp2f1ra( a, b, c, x, loss ) { + var f2Val; + var f1Val; + var f0Val; + var err; + var da; + var f1; + var f0; + var t; + var n; + + loss = 0.0; + err = 0.0; + + if ( ( c < 0.0 && a <= c ) || ( c >= 0.0 && a >= c ) ) { + da = round( a-c ); + } else { + da = round( a ); + } + + t = a - da; + if ( abs( da ) > MAX_ITERATIONS ) { + // Too expensive to compute, so return `NaN`: + loss = 1.0; + return { + 'value': NaN, + 'error': loss + }; + } + + if ( da < 0.0 ) { + // Backward recurrence... + f2Val = 0.0; + f1 = hys2f1( t, b, c, x, err ); + loss += f1.error; + err = f1.error; + f0 = hys2f1( t-1.0, b, c, x, err ); + loss += f0.error; + t -= 1.0; + f1Val = f1.value; + f0Val = f0.value; + for ( n = 1; n < -da; n++ ) { + f2Val = f1Val; + f1Val = f0Val; + + // eslint-disable-next-line max-len + f0Val = -( ( ( ( (2.0*t)-c )-( t*x )+( b*x ) ) * f1Val ) + ( ( t*(x-1.0) ) * f2Val ) ) / ( c-t ); + t -= 1.0; + } + } else { + // Forward recurrence... + f2Val = 0.0; + f1 = hys2f1( t, b, c, x, err ); + loss += f1.error; + err = f1.error; + f0 = hys2f1( t+1.0, b, c, x, err ); + loss += f0.error; + t += 1.0; + f1Val = f1.value; + f0Val = f0.value; + for ( n = 1; n < da; n++ ) { + f2Val = f1Val; + f1Val = f0Val; + + // eslint-disable-next-line max-len + f0Val = -( ( ( ( (2.0*t)-c )-( t*x )+( b*x ) ) * f1Val ) + ( (c-t)*f2Val ) ) / ( t*(x-1.0) ); + t += 1.0; + } + } + + return { + 'value': f0Val, + 'error': loss + }; +} + + +// MAIN // + +/** +* Evaluates the power series expansion of Gaussian hypergeometric function. +* +* @private +* @param {number} a - input value +* @param {number} b - input value +* @param {number} c - input value +* @param {number} x - input value +* @param {number} loss - starting loss of significance +* @returns {Object} the function value and error +*/ +function hys2f1( a, b, c, x, loss ) { + var intFlag; + var umax; + var f; + var g; + var h; + var k; + var m; + var s; + var u; + var i; + + intFlag = 0; + + if ( abs( b ) > abs( a ) ) { + f = b; + b = a; + a = f; + } + + if ( isNonPositiveInteger( b ) && ( abs( b ) < abs( a ) ) ) { + f = b; + b = a; + a = f; + intFlag = 1; + } + + // eslint-disable-next-line max-len + if ( ( ( abs( a ) > abs( c ) + 1.0 ) || intFlag ) && ( abs( c-a ) > 2.0 ) && ( abs( a ) > 2.0 ) ) { + return hyp2f1ra( a, b, c, x, loss ); + } + + i = 0.0; + umax = 0.0; + f = a; + g = b; + h = c; + s = 1.0; + u = 1.0; + k = 0.0; + + do { + if ( abs( h ) < EPS ) { + loss = 1.0; + return { + 'value': PINF, + 'error': loss + }; + } + m = k + 1.0; + u *= ( ( f+k ) * ( g+k ) * x / ( ( h+k ) * m ) ); + s += u; + k = abs( u ); + if ( k > umax ) { + umax = k; + } + k = m; + i += 1.0; + if ( i > MAX_ITERATIONS ) { + loss = 1.0; + return { + 'value': s, + 'error': loss + }; + } + } while ( s === 0.0 || abs( u/s ) > MACHEP ); + + // Estimate the relative error due to truncation by the series: + loss = ( ( MACHEP*umax ) / abs( s ) ) + ( MACHEP*i ); + return { + 'value': s, + 'error': loss + }; +} + + +// EXPORTS // + +module.exports = hys2f1; diff --git a/lib/node_modules/@stdlib/math/base/special/hyp2f1/lib/hyt2f1.js b/lib/node_modules/@stdlib/math/base/special/hyp2f1/lib/hyt2f1.js new file mode 100644 index 000000000000..99ebf12a4314 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/hyp2f1/lib/hyt2f1.js @@ -0,0 +1,242 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2025 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. +* +* +* ## Notice +* +* The original C code and copyright notice are from the [Cephes Mathematical Library]{@link https://www.netlib.org/cephes/}. The implementation has been modified for JavaScript. +* +* ```text +* (C) Copyright Stephen L. Moshier 1984, 1987, 1992, 2000. +* +* Use, modification and distribution are subject to the +* Cephes Mathematical Library License. (See accompanying file +* LICENSE or copy at https://smath.com/en-US/view/CephesMathLibrary/license) +* ``` +*/ + +'use strict'; + +// MODULES // + +var abs = require( '@stdlib/math/base/special/abs' ); +var pow = require( '@stdlib/math/base/special/pow' ); +var max = require( '@stdlib/math/base/special/max' ); +var exp = require( '@stdlib/math/base/special/exp' ); +var ln = require( '@stdlib/math/base/special/ln' ); +var round = require( '@stdlib/math/base/special/round' ); +var gamma = require( '@stdlib/math/base/special/gamma' ); +var gammaln = require( '@stdlib/math/base/special/gammaln' ); +var gammasgn = require( '@stdlib/math/base/special/gammasgn' ); +var digamma = require( '@stdlib/math/base/special/digamma' ); +var isNonPositiveInteger = require( './isnonpositiveinteger.js' ); +var isInteger = require( './isinteger.js' ); +var hys2f1 = require( './hys2f1.js' ); +var config = require( './config.json' ); + + +// VARIABLES // + +var MACHEP = config.MACHEP; +var EPS = config.EPS; +var ETHRESH = config.ETHRESH; +var MAX_ITERATIONS = config.MAX_ITERATIONS; + + +// MAIN // + +/** +* Applies transformations for `|x|` near unity before performing a power series expansion. +* +* @private +* @param {number} a - input value +* @param {number} b - input value +* @param {number} c - input value +* @param {number} x - input value +* @param {number} loss - starting loss of significance +* @returns {Object} the function value and error +*/ +function hyt2f1( a, b, c, x, loss ) { + var negIntA; + var negIntB; + var qVal; + var rVal; + var sign; + var err1; + var err; + var val; + var aid; + var ax; + var id; + var d1; + var d2; + var y1; + var i; + var p; + var q; + var r; + var t; + var y; + var w; + var d; + var e; + var s; + + negIntA = isNonPositiveInteger( a ); + negIntB = isNonPositiveInteger( b ); + err = 0.0; + err1 = 0.0; + s = 1.0 - x; + + if ( x < -0.5 && !( negIntA || negIntB ) ) { + if ( b > a ) { + // Transformation based on AMS55 #15.3.4: + y = hys2f1( a, c-b, c, -x/s, err ); + val = pow( s, -a ) * y.value; + } else { + // Transformation based on AMS55 #15.3.5: + y = hys2f1( c-a, b, c, -x/s, err ); + val = pow( s, -b ) * y.value; + } + loss = y.error; + return { + 'value': val, + 'error': loss + }; + } + + d = c - a - b; + id = round( d ); + + if ( x > 0.9 && !negIntA && !negIntB ) { + if ( isInteger( d ) === false ) { + // Try the power series first: + y = hys2f1( a, b, c, x, err ); + if ( y.error < ETHRESH ) { + return y; + } + // If the power series fails, then apply AMS55 #15.3.6... + err = y.error; + q = hys2f1( a, b, 1.0-d, s, err ); + qVal = q.value; + err = q.error; + sign = 1.0; + w = gammaln( d ); + sign *= gammasgn( d ); + w -= gammaln( c-a ); + sign *= gammasgn( c-a ); + w -= gammaln( c-b ); + sign *= gammasgn( c-b ); + qVal *= sign * exp( w ); + + r = hys2f1( c-a, c-b, d+1.0, s, err1 ); + err1 = r.error; + rVal = pow( s, d ) * r.value; + sign = 1.0; + w = gammaln( -d ); + sign *= gammasgn( -d ); + w -= gammaln( a ); + sign *= gammasgn( a ); + w -= gammaln( b ); + sign *= gammasgn( b ); + rVal *= sign * exp( w ); + + y = qVal + rVal; + err += err1 + ( ( MACHEP * max( abs( qVal ), abs( rVal ) ) ) / y ); + y *= gamma( c ); + } else { + // Psi function expansion, AMS55 #15.3.10, #15.3.11, #15.3.12... + if ( id >= 0.0 ) { + e = d; + d1 = d; + d2 = 0.0; + aid = id; + } else { + e = -d; + d1 = 0.0; + d2 = d; + aid = -id; + } + ax = ln( s ); + + // eslint-disable-next-line max-len + y = digamma( 1.0 ) + digamma( 1.0+e ) - digamma( a+d1 ) - digamma( b+d1 ) - ax; + y /= gamma( e+1.0 ); + p = ( a+d1 ) * ( b+d1 ) * s / gamma( e+2.0 ); + t = 1.0; + do { + // eslint-disable-next-line max-len + r = digamma( 1.0+t ) + digamma( 1.0+t+e ) - digamma( a+t+d1 ) - digamma( b+t+d1 ) - ax; + q = p * r; + y += q; + p *= s * ( a+t+d1 ) / ( t+1.0 ); + p *= ( b+t+d1 ) / ( t+1.0+e ); + t += 1.0; + if ( t > MAX_ITERATIONS ) { + loss = 1.0; + return { + 'value': NaN, + 'error': loss + }; + } + } while ( y === 0.0 || abs( q/y ) > EPS ); + + if ( id === 0.0 ) { + y *= gamma( c ) / ( gamma( a ) * gamma( b ) ); + return { + 'value': y, + 'error': err + }; + } + + y1 = 1.0; + if ( aid !== 1.0 ) { + t = 0.0; + p = 1.0; + for ( i = 1; i < aid; i++ ) { + r = 1.0 - e + t; + p *= s * ( a+t+d2 ) * ( b+t+d2 ) / r; + t += 1.0; + p /= t; + y1 += p; + } + } + + p = gamma( c ); + y1 *= gamma( e ) * p / ( gamma( a+d1 ) * gamma( b+d1 ) ); + y *= p / ( gamma( a+d2 ) * gamma( b+d2 ) ); + if ( aid % 2.0 !== 0.0 ) { + y = -y; + } + q = pow( s, id ); + y = ( id > 0.0 ) ? y*q : y1*q; + y += y1; + } + return { + 'value': y, + 'error': err + }; + } + // Perform power series if no special cases: + y = hys2f1( a, b, c, x, err ); + return y; +} + + +// EXPORTS // + +module.exports = hyt2f1; diff --git a/lib/node_modules/@stdlib/math/base/special/hyp2f1/lib/index.js b/lib/node_modules/@stdlib/math/base/special/hyp2f1/lib/index.js new file mode 100644 index 000000000000..09e590b4624e --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/hyp2f1/lib/index.js @@ -0,0 +1,58 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2025 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'; + +/** +* Evaluate the Gaussian hypergoemetric function. +* +* @module @stdlib/math/base/special/hyp2f1 +* +* @example +* var hyp2f1 = require( '@stdlib/math/base/special/hyp2f1' ); +* +* var v = hyp2f1( 1.0, 1.0, 1.0, 0.0 ); +* // returns 1.0 +* +* v = hyp2f1( 10.0, 7.4, -1.8, -0.99 ); +* // returns ~0.423 +* +* v = hyp2f1( 10.0, 1.0, -1.8, -0.99 ); +* // returns ~-0.875 +* +* v = hyp2f1( 2.0, 3.0, 5.0, 0.99 ); +* // returns ~27.699 +* +* v = hyp2f1( 3.0, 4.0, 7.0, 1.0 ); +* // returns +Infinity +* +* v = hyp2f1( NaN, 3.0, 2.0, 0.5 ); +* // returns NaN +* +* v = hyp2f1( 1.0, NaN, 2.0, 0.5 ); +* // returns NaN +*/ + +// MODULES // + +var hyp2f1 = require( './main.js' ); + + +// EXPORTS // + +module.exports = hyp2f1; diff --git a/lib/node_modules/@stdlib/math/base/special/hyp2f1/lib/isinteger.js b/lib/node_modules/@stdlib/math/base/special/hyp2f1/lib/isinteger.js new file mode 100644 index 000000000000..71439f3be6f7 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/hyp2f1/lib/isinteger.js @@ -0,0 +1,67 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2025 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. +* +* +* ## Notice +* +* The original C code and copyright notice are from the [Cephes Mathematical Library]{@link https://www.netlib.org/cephes/}. The implementation has been modified for JavaScript. +* +* ```text +* (C) Copyright Stephen L. Moshier 1984, 1987, 1992, 2000. +* +* Use, modification and distribution are subject to the +* Cephes Mathematical Library License. (See accompanying file +* LICENSE or copy at https://smath.com/en-US/view/CephesMathLibrary/license) +* ``` +*/ + +'use strict'; + +// MODULES // + +var round = require( '@stdlib/math/base/special/round' ); +var abs = require( '@stdlib/math/base/special/abs' ); +var config = require( './config.json' ); + + +// VARIABLES // + +var EPS = config.EPS; + + +// MAIN // + +/** +* Tests if a finite double-precision floating-point number is a "close enough" integer. +* +* @private +* @param {number} x - input value +* @returns {boolean} boolean indicating whether the value is a "close enough" integer +*/ +function isInteger( x ) { + var diff; + var ix; + + ix = round( x ); + diff = abs( x - ix ); + return ( diff < EPS ); +} + + +// EXPORTS // + +module.exports = isInteger; diff --git a/lib/node_modules/@stdlib/math/base/special/hyp2f1/lib/isnonpositiveinteger.js b/lib/node_modules/@stdlib/math/base/special/hyp2f1/lib/isnonpositiveinteger.js new file mode 100644 index 000000000000..eda458f8acf4 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/hyp2f1/lib/isnonpositiveinteger.js @@ -0,0 +1,67 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2025 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. +* +* +* ## Notice +* +* The original C code and copyright notice are from the [Cephes Mathematical Library]{@link https://www.netlib.org/cephes/}. The implementation has been modified for JavaScript. +* +* ```text +* (C) Copyright Stephen L. Moshier 1984, 1987, 1992, 2000. +* +* Use, modification and distribution are subject to the +* Cephes Mathematical Library License. (See accompanying file +* LICENSE or copy at https://smath.com/en-US/view/CephesMathLibrary/license) +* ``` +*/ + +'use strict'; + +// MODULES // + +var round = require( '@stdlib/math/base/special/round' ); +var abs = require( '@stdlib/math/base/special/abs' ); +var config = require( './config.json' ); + + +// VARIABLES // + +var EPS = config.EPS; + + +// MAIN // + +/** +* Tests if a finite double-precision floating-point number is a "close enough" nonpositive integer. +* +* @private +* @param {number} x - input value +* @returns {boolean} boolean indicating whether the value is a "close enough" nonpositive integer +*/ +function isNonPositiveInteger( x ) { + var diff; + var ix; + + ix = round( x ); + diff = abs( x - ix ); + return ( ( ix <= 0.0 ) && ( diff < EPS ) ); +} + + +// EXPORTS // + +module.exports = isNonPositiveInteger; diff --git a/lib/node_modules/@stdlib/math/base/special/hyp2f1/lib/main.js b/lib/node_modules/@stdlib/math/base/special/hyp2f1/lib/main.js new file mode 100644 index 000000000000..32ae742b1c62 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/hyp2f1/lib/main.js @@ -0,0 +1,279 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2025 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. +* +* +* ## Notice +* +* The original C code and copyright notice are from the [Cephes Mathematical Library]{@link https://www.netlib.org/cephes/}. The implementation has been modified for JavaScript. +* +* ```text +* (C) Copyright Stephen L. Moshier 1984, 1987, 1992, 2000. +* +* Use, modification and distribution are subject to the +* Cephes Mathematical Library License. (See accompanying file +* LICENSE or copy at https://smath.com/en-US/view/CephesMathLibrary/license) +* ``` +*/ + +'use strict'; + +// MODULES // + +var isnan = require( '@stdlib/assert/is-nan' ); +var PINF = require( '@stdlib/constants/float64/pinf' ); +var round = require( '@stdlib/math/base/special/round' ); +var gamma = require( '@stdlib/math/base/special/gamma' ); +var pow = require( '@stdlib/math/base/special/pow' ); +var abs = require( '@stdlib/math/base/special/abs' ); +var isNonPositiveInteger = require( './isnonpositiveinteger.js' ); +var isInteger = require( './isinteger.js' ); +var hys2f1 = require( './hys2f1.js' ); +var hyt2f1 = require( './hyt2f1.js' ); +var config = require( './config.json' ); + + +// VARIABLES // + +var ETHRESH = config.ETHRESH; + + +// MAIN // + +/** +* Evaluates the Gaussian hypergeometric function. +* +* @param {number} a - input value +* @param {number} b - input value +* @param {number} c - input value +* @param {number} x - input value +* @returns {number} function value +* +* @example +* var v = hyp2f1( 1.0, 1.0, 1.0, 0.0 ); +* // returns 1.0 +* +* @example +* var v = hyp2f1( 10.0, 7.4, -1.8, -0.99 ); +* // returns ~0.423 +* +* @example +* var v = hyp2f1( 10.0, 1.0, -1.8, -0.99 ); +* // returns ~-0.875 +* +* @example +* var v = hyp2f1( 2.0, 3.0, 5.0, 0.99 ); +* // returns ~27.699 +* +* @example +* var v = hyp2f1( 3.0, 4.0, 7.0, 1.0 ); +* // returns +Infinity +* +* @example +* var v = hyp2f1( NaN, 3.0, 2.0, 0.5 ); +* // returns NaN +* +* @example +* var v = hyp2f1( 1.0, NaN, 2.0, 0.5 ); +* // returns NaN +*/ +function hyp2f1( a, b, c, x ) { + var negIntCaOrCb; + var negIntC; + var negIntB; + var negIntA; + var isIntD; + var aid; + var err; + var ax; + var d2; + var d1; + var id; + var ic; + var ia; + var ib; + var t1; + var y1; + var y2; + var q; + var r; + var p; + var e; + var s; + var d; + var y; + var i; + + err = 0.0; + ax = abs( x ); + ia = round( a ); + ib = round( b ); + id = round( d ); + ic = round( c ); + s = 1.0 - x; + d = c - a - b; + negIntA = isNonPositiveInteger( a ); + negIntB = isNonPositiveInteger( b ); + negIntC = isNonPositiveInteger( c ); + isIntD = isInteger( d ); + t1 = abs( b-a ); + + if ( isnan( a ) || isnan( b ) || isnan( c ) || isnan( x ) ) { + return NaN; + } + + if ( x === 0.0 ) { + return 1.0; + } + + if ( ( a === 0.0 || b === 0.0 ) && c !== 0.0 ) { + return 1.0; + } + + // The transformation for c - a or c - b negative integer (AMS55 #15.3.3)... + if ( d <= -1.0 && !( !isIntD && s < 0.0 ) && !( negIntA || negIntB ) ) { + return pow( s, d ) * hyp2f1( c-a, c-b, c, x ); + } + + // Check whether the series diverges... + if ( d <= 0.0 && x === 1.0 && !( negIntA || negIntB ) ) { + return PINF; + } + + if ( ax < 1.0 || x === -1.0 ) { + if ( b === c ) { + // 2F1(a,b;b;x) = (1-x)**(-a): + return pow( s, -a ); + } + if ( a === c ) { + // 2F1(a,b;a;x) = (1-x)**(-b): + return pow( s, -b ); + } + } + + if ( negIntC ) { + // Check if termination before explosion... + if ( negIntA && ( ia > ic ) ) { + y = hyt2f1( a, b, c, x, err ); + return y.value; + } + if ( negIntB && ( ib > ic ) ) { + y = hyt2f1( a, b, c, x, err ); + return y.value; + } + return PINF; + } + + // Check whether the function is a polynomial before trying the power series expansion... + if ( negIntA || negIntB ) { + y = hyt2f1( a, b, c, x, err ); + return y.value; + } + + // The following transform has a pole for integer b - a and may cause large cancellation errors near |1/x| = 1 (AMS55 #15.3.7)... + if ( x < -2.0 && !isInteger( t1 ) ) { + p = hyp2f1( a, 1.0-c+a, 1.0-b+a, 1.0/x ); + q = hyp2f1( b, 1.0-c+b, 1.0-a+b, 1.0/x ); + p *= pow( -x, -a ); + q *= pow( -x, -b ); + t1 = gamma( c ); + s = t1 * gamma( b-a ) / ( gamma( b ) * gamma( c-a ) ); + y = t1 * gamma( a-b ) / ( gamma( a ) * gamma( c-b ) ); + return ( s*p ) + ( y*q ); + } + if ( x < -1.0 ) { + // Transformation based on AMS55 #15.3.4... + if ( abs( a ) < abs( b ) ) { + return pow( s, -a ) * hyp2f1( a, c-b, c, x/( x-1.0 ) ); + } + // Transformation based on AMS55 #15.3.5: + return pow( s, -b ) * hyp2f1( b, c-a, c, x/( x-1.0 ) ); + } + + // The series diverges for `|x|` greater than unity if above checks fail... + if ( ax > 1.0 ) { + return PINF; + } + + p = c - a; + r = c - b; + negIntCaOrCb = isNonPositiveInteger( p ) || isNonPositiveInteger( r ); + + // If `|x|` is equal to unity, the function is a polynomial... + if ( ax === 1.0 ) { + if ( x > 0.0 ) { + if ( negIntCaOrCb ) { + if ( d >= 0.0 ) { + // Transformation based on AMS55 #15.3.3: + y = hys2f1( c-a, c-b, c, x, err ); + return pow( s, d ) * y.value; + } + return PINF; + } + if ( d <= 0.0 ) { + return PINF; + } + // Transformation based on AMS55 #15.3.6: + return gamma( c ) * gamma( d ) / ( gamma( p ) * gamma( r ) ); + } + if ( d <= -1.0 ) { + return PINF; + } + } + + // Conditionally make `d > 0` by recurrence on `c` (AMS55 #15.2.27)... + if ( d < 0.0 ) { + // Try the power series first: + y = hyt2f1( a, b, c, x, err ); + if ( y.error < ETHRESH ) { + return y.value; + } + // If the power series fails, then apply the recurrence... + y = y.value; + err = 0.0; + aid = 2.0 - id; + e = c + aid; + d2 = hyp2f1( a, b, e, x ); + d1 = hyp2f1( a, b, e+1.0, x ); + q = a + b + 1.0; + for ( i = 0; i < aid; i++ ) { + r = e - 1.0; + y1 = ( e-a ) * ( e-b ) * x; + y2 = r - ( ( (2.0*e)-q ) * x ); + y2 *= e; + y = ( ( y2*d2 ) + ( y1*d1 ) ) / ( e*r*s ); + e = r; + d1 = d2; + d2 = y; + } + return y; + } + + // The transformation for c - a or c - b negative integer (AMS55 #15.3.3)... + if ( negIntCaOrCb ) { + y = hys2f1( c-a, c-b, c, x, err ); + return pow( s, d ) * y.value; + } + + // Try the power series: + y = hyt2f1( a, b, c, x, err ); + return y.value; +} + + +// EXPORTS // + +module.exports = hyp2f1; diff --git a/lib/node_modules/@stdlib/math/base/special/hyp2f1/package.json b/lib/node_modules/@stdlib/math/base/special/hyp2f1/package.json new file mode 100644 index 000000000000..7a7001f392ee --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/hyp2f1/package.json @@ -0,0 +1,66 @@ +{ + "name": "@stdlib/math/base/special/hyp2f1", + "version": "0.0.0", + "description": "Evaluates the Gaussian hypergeometric function.", + "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", + "directories": { + "benchmark": "./benchmark", + "doc": "./docs", + "example": "./examples", + "lib": "./lib", + "test": "./test" + }, + "types": "./docs/types", + "scripts": {}, + "homepage": "https://github.com/stdlib-js/stdlib", + "repository": { + "type": "git", + "url": "git://github.com/stdlib-js/stdlib.git" + }, + "bugs": { + "url": "https://github.com/stdlib-js/stdlib/issues" + }, + "dependencies": {}, + "devDependencies": {}, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "keywords": [ + "stdlib", + "stdmath", + "mathematics", + "math", + "special function", + "special", + "function", + "hypergeometric", + "gaussian", + "special functions", + "hyp2f1", + "hypergeometric function", + "number" + ] +} diff --git a/lib/node_modules/@stdlib/math/base/special/hyp2f1/test/fixtures/python/basic.json b/lib/node_modules/@stdlib/math/base/special/hyp2f1/test/fixtures/python/basic.json new file mode 100644 index 000000000000..65c16efd72f9 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/hyp2f1/test/fixtures/python/basic.json @@ -0,0 +1 @@ +{"a": [-50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 49, 49, 49, 49, 49, 49, 49, 49, 49, 50], "b": [-50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 49, 49, 49, 49, 49, 49, 49, 49, 49, 50], "c": [-50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 49, 49, 49, 49, 49, 49, 49, 49, 49, 50], "x": [-50.0, -49.8998998998999, -49.7997997997998, -49.6996996996997, -49.5995995995996, -49.4994994994995, -49.3993993993994, -49.2992992992993, -49.1991991991992, -49.0990990990991, -48.998998998999, -48.8988988988989, -48.7987987987988, -48.6986986986987, -48.5985985985986, -48.4984984984985, -48.3983983983984, -48.2982982982983, -48.1981981981982, -48.0980980980981, -47.997997997998, -47.8978978978979, -47.7977977977978, -47.6976976976977, -47.5975975975976, -47.4974974974975, -47.3973973973974, -47.2972972972973, -47.1971971971972, -47.0970970970971, -46.996996996997, -46.8968968968969, -46.7967967967968, -46.6966966966967, -46.5965965965966, -46.4964964964965, -46.3963963963964, -46.2962962962963, -46.1961961961962, -46.0960960960961, -45.995995995996, -45.8958958958959, -45.7957957957958, -45.6956956956957, -45.5955955955956, -45.4954954954955, -45.3953953953954, -45.2952952952953, -45.1951951951952, -45.0950950950951, -44.994994994995, -44.8948948948949, -44.7947947947948, -44.6946946946947, -44.5945945945946, -44.4944944944945, -44.394394394394396, -44.294294294294296, -44.194194194194196, -44.094094094094096, -43.993993993993996, -43.893893893893896, -43.793793793793796, -43.693693693693696, -43.593593593593596, -43.493493493493496, -43.393393393393396, -43.293293293293296, -43.193193193193196, -43.093093093093096, -42.992992992992995, -42.892892892892895, -42.792792792792795, -42.692692692692695, -42.592592592592595, -42.49249249249249, -42.392392392392395, -42.29229229229229, -42.192192192192195, -42.09209209209209, -41.991991991991995, -41.89189189189189, -41.791791791791795, -41.69169169169169, -41.591591591591595, -41.49149149149149, -41.391391391391394, -41.29129129129129, -41.191191191191194, -41.09109109109109, -40.990990990990994, -40.89089089089089, -40.790790790790794, -40.69069069069069, -40.590590590590594, -40.49049049049049, -40.390390390390394, -40.29029029029029, -40.190190190190194, -40.09009009009009, -39.98998998998999, -39.889889889889886, -39.78978978978979, -39.689689689689686, -39.58958958958959, -39.489489489489486, -39.38938938938939, -39.289289289289286, -39.189189189189186, -39.089089089089086, -38.988988988988986, -38.888888888888886, -38.788788788788786, -38.688688688688686, -38.588588588588586, -38.488488488488485, -38.388388388388385, -38.288288288288285, -38.188188188188185, -38.088088088088085, -37.987987987987985, -37.887887887887885, -37.787787787787785, -37.687687687687685, -37.587587587587585, -37.487487487487485, -37.387387387387385, -37.287287287287285, -37.187187187187185, -37.087087087087085, -36.986986986986985, -36.886886886886884, -36.786786786786784, -36.686686686686684, -36.586586586586584, -36.486486486486484, -36.386386386386384, -36.286286286286284, -36.186186186186184, -36.086086086086084, -35.985985985985984, -35.885885885885884, -35.785785785785784, -35.685685685685684, -35.585585585585584, -35.48548548548548, -35.38538538538538, -35.28528528528528, -35.18518518518518, -35.08508508508508, -34.98498498498498, -34.88488488488488, -34.78478478478478, -34.68468468468468, -34.58458458458458, -34.48448448448448, -34.38438438438438, -34.28428428428428, -34.18418418418418, -34.08408408408408, -33.98398398398398, -33.88388388388388, -33.78378378378378, -33.68368368368368, -33.58358358358358, -33.48348348348348, -33.38338338338338, -33.28328328328328, -33.18318318318318, -33.08308308308308, -32.98298298298298, -32.88288288288288, -32.78278278278278, -32.68268268268268, -32.58258258258258, -32.48248248248248, -32.38238238238238, -32.28228228228228, -32.18218218218218, -32.08208208208208, -31.98198198198198, -31.88188188188188, -31.78178178178178, -31.68168168168168, -31.58158158158158, -31.48148148148148, -31.38138138138138, -31.28128128128128, -31.18118118118118, -31.08108108108108, -30.98098098098098, -30.88088088088088, -30.78078078078078, -30.68068068068068, -30.58058058058058, -30.48048048048048, -30.38038038038038, -30.28028028028028, -30.18018018018018, -30.08008008008008, -29.97997997997998, -29.87987987987988, -29.77977977977978, -29.67967967967968, -29.57957957957958, -29.47947947947948, -29.37937937937938, -29.27927927927928, -29.17917917917918, -29.07907907907908, -28.97897897897898, -28.87887887887888, -28.77877877877878, -28.67867867867868, -28.578578578578576, -28.478478478478475, -28.378378378378375, -28.278278278278275, -28.178178178178175, -28.078078078078075, -27.977977977977975, -27.877877877877875, -27.777777777777775, -27.677677677677675, -27.577577577577575, -27.477477477477475, -27.377377377377375, -27.277277277277275, -27.177177177177175, -27.077077077077075, -26.976976976976974, -26.876876876876874, -26.776776776776774, -26.676676676676674, -26.576576576576574, -26.476476476476474, -26.376376376376374, -26.276276276276274, -26.176176176176174, -26.076076076076074, -25.975975975975974, -25.875875875875874, -25.775775775775774, -25.675675675675674, -25.575575575575574, -25.475475475475474, -25.375375375375373, -25.275275275275273, -25.175175175175173, -25.075075075075073, -24.974974974974973, -24.874874874874873, -24.774774774774773, -24.674674674674673, -24.574574574574573, -24.474474474474473, -24.374374374374373, -24.274274274274273, -24.174174174174173, -24.074074074074073, -23.973973973973973, -23.873873873873872, -23.773773773773772, -23.673673673673672, -23.573573573573572, -23.473473473473472, -23.373373373373372, -23.273273273273272, -23.173173173173172, -23.073073073073072, -22.972972972972972, -22.872872872872872, -22.772772772772772, -22.67267267267267, -22.57257257257257, -22.47247247247247, -22.37237237237237, -22.27227227227227, -22.17217217217217, -22.07207207207207, -21.97197197197197, -21.87187187187187, -21.77177177177177, -21.67167167167167, -21.57157157157157, -21.47147147147147, -21.37137137137137, -21.27127127127127, -21.17117117117117, -21.07107107107107, -20.97097097097097, -20.87087087087087, -20.77077077077077, -20.67067067067067, -20.57057057057057, -20.47047047047047, -20.37037037037037, -20.27027027027027, -20.17017017017017, -20.070070070070066, -19.969969969969966, -19.869869869869866, -19.769769769769766, -19.669669669669666, -19.569569569569566, -19.469469469469466, -19.369369369369366, -19.269269269269266, -19.169169169169166, -19.069069069069066, -18.968968968968966, -18.868868868868866, -18.768768768768766, -18.668668668668666, -18.568568568568566, -18.468468468468465, -18.368368368368365, -18.268268268268265, -18.168168168168165, -18.068068068068065, -17.967967967967965, -17.867867867867865, -17.767767767767765, -17.667667667667665, -17.567567567567565, -17.467467467467465, -17.367367367367365, -17.267267267267265, -17.167167167167165, -17.067067067067065, -16.966966966966964, -16.866866866866864, -16.766766766766764, -16.666666666666664, -16.566566566566564, -16.466466466466464, -16.366366366366364, -16.266266266266264, -16.166166166166164, -16.066066066066064, -15.965965965965964, -15.865865865865864, -15.765765765765764, -15.665665665665664, -15.565565565565564, -15.465465465465464, -15.365365365365363, -15.265265265265263, -15.165165165165163, -15.065065065065063, -14.964964964964963, -14.864864864864863, -14.764764764764763, -14.664664664664663, -14.564564564564563, -14.464464464464463, -14.364364364364363, -14.264264264264263, -14.164164164164163, -14.064064064064063, -13.963963963963963, -13.863863863863862, -13.763763763763762, -13.663663663663662, -13.563563563563562, -13.463463463463462, -13.363363363363362, -13.263263263263262, -13.163163163163162, -13.063063063063062, -12.962962962962962, -12.862862862862862, -12.762762762762762, -12.662662662662662, -12.562562562562562, -12.462462462462462, -12.362362362362362, -12.262262262262261, -12.162162162162161, -12.062062062062061, -11.961961961961961, -11.861861861861861, -11.761761761761761, -11.661661661661661, -11.561561561561561, -11.461461461461461, -11.36136136136136, -11.26126126126126, -11.16116116116116, -11.06106106106106, -10.96096096096096, -10.86086086086086, -10.76076076076076, -10.66066066066066, -10.56056056056056, -10.46046046046046, -10.36036036036036, -10.26026026026026, -10.16016016016016, -10.06006006006006, -9.95995995995996, -9.85985985985986, -9.75975975975976, -9.65965965965966, -9.55955955955956, -9.45945945945946, -9.35935935935936, -9.25925925925926, -9.15915915915916, -9.05905905905906, -8.95895895895896, -8.85885885885886, -8.75875875875876, -8.65865865865866, -8.558558558558559, -8.458458458458459, -8.358358358358359, -8.258258258258259, -8.158158158158159, -8.058058058058059, -7.957957957957959, -7.857857857857859, -7.7577577577577586, -7.6576576576576585, -7.557557557557558, -7.457457457457458, -7.357357357357358, -7.257257257257251, -7.157157157157151, -7.057057057057051, -6.956956956956951, -6.856856856856851, -6.756756756756751, -6.656656656656651, -6.556556556556551, -6.456456456456451, -6.3563563563563505, -6.2562562562562505, -6.15615615615615, -6.05605605605605, -5.95595595595595, -5.85585585585585, -5.75575575575575, -5.65565565565565, -5.55555555555555, -5.45545545545545, -5.35535535535535, -5.25525525525525, -5.15515515515515, -5.05505505505505, -4.95495495495495, -4.85485485485485, -4.7547547547547495, -4.6546546546546494, -4.554554554554549, -4.454454454454449, -4.354354354354349, -4.254254254254249, -4.154154154154149, -4.054054054054049, -3.953953953953949, -3.853853853853849, -3.753753753753749, -3.653653653653649, -3.5535535535535487, -3.4534534534534487, -3.3533533533533486, -3.2532532532532485, -3.1531531531531485, -3.0530530530530484, -2.9529529529529484, -2.8528528528528483, -2.7527527527527482, -2.652652652652648, -2.552552552552548, -2.452452452452448, -2.352352352352348, -2.252252252252248, -2.152152152152148, -2.0520520520520478, -1.9519519519519477, -1.8518518518518476, -1.7517517517517476, -1.6516516516516475, -1.5515515515515474, -1.4514514514514474, -1.3513513513513473, -1.2512512512512473, -1.1511511511511472, -1.0510510510510471, -0.9509509509509471, -0.850850850850847, -0.7507507507507469, -0.6506506506506469, -0.5505505505505468, -0.45045045045044674, -0.3503503503503467, -0.2502502502502466, -0.15015015015014654, -0.05005005005004648, 0.050050050050053585, 0.15015015015015365, 0.2502502502502537, 0.3503503503503538, 0.45045045045045384, 0.5505505505505539, 0.650650650650654, 0.750750750750754, 0.8508508508508541, 0.9509509509509542, 1.0510510510510542, 1.1511511511511543, 1.2512512512512544, 1.3513513513513544, 1.4514514514514545, 1.5515515515515546, 1.6516516516516546, 1.7517517517517547, 1.8518518518518547, 1.9519519519519548, 2.052052052052055, 2.152152152152155, 2.252252252252255, 2.352352352352355, 2.452452452452455, 2.552552552552555, 2.6526526526526553, 2.7527527527527553, 2.8528528528528554, 2.9529529529529555, 3.0530530530530555, 3.1531531531531556, 3.2532532532532557, 3.3533533533533557, 3.453453453453456, 3.553553553553556, 3.653653653653656, 3.753753753753756, 3.853853853853856, 3.953953953953956, 4.054054054054056, 4.154154154154156, 4.254254254254256, 4.354354354354356, 4.454454454454456, 4.5545545545545565, 4.6546546546546566, 4.754754754754757, 4.854854854854857, 4.954954954954957, 5.055055055055057, 5.155155155155157, 5.255255255255257, 5.355355355355357, 5.455455455455457, 5.555555555555557, 5.655655655655657, 5.755755755755757, 5.855855855855857, 5.955955955955957, 6.0560560560560575, 6.1561561561561575, 6.256256256256258, 6.356356356356358, 6.456456456456458, 6.556556556556558, 6.656656656656658, 6.756756756756758, 6.856856856856858, 6.956956956956958, 7.057057057057058, 7.157157157157158, 7.257257257257258, 7.357357357357358, 7.457457457457458, 7.557557557557558, 7.6576576576576585, 7.7577577577577586, 7.857857857857859, 7.957957957957959, 8.058058058058059, 8.158158158158159, 8.258258258258259, 8.358358358358359, 8.458458458458459, 8.558558558558559, 8.65865865865866, 8.75875875875876, 8.85885885885886, 8.95895895895896, 9.05905905905906, 9.15915915915916, 9.25925925925926, 9.35935935935936, 9.45945945945946, 9.55955955955956, 9.65965965965966, 9.75975975975976, 9.859859859859867, 9.959959959959967, 10.060060060060067, 10.160160160160167, 10.260260260260267, 10.360360360360367, 10.460460460460467, 10.560560560560567, 10.660660660660668, 10.760760760760768, 10.860860860860868, 10.960960960960968, 11.061061061061068, 11.161161161161168, 11.261261261261268, 11.361361361361368, 11.461461461461468, 11.561561561561568, 11.661661661661668, 11.761761761761768, 11.861861861861868, 11.961961961961968, 12.062062062062068, 12.162162162162168, 12.262262262262269, 12.362362362362369, 12.462462462462469, 12.562562562562569, 12.662662662662669, 12.762762762762769, 12.862862862862869, 12.962962962962969, 13.063063063063069, 13.16316316316317, 13.26326326326327, 13.36336336336337, 13.46346346346347, 13.56356356356357, 13.66366366366367, 13.76376376376377, 13.86386386386387, 13.96396396396397, 14.06406406406407, 14.164164164164163, 14.26426426426427, 14.364364364364363, 14.46446446446447, 14.564564564564563, 14.66466466466467, 14.764764764764763, 14.86486486486487, 14.964964964964963, 15.06506506506507, 15.165165165165163, 15.26526526526527, 15.365365365365363, 15.46546546546547, 15.565565565565564, 15.66566566566567, 15.765765765765764, 15.86586586586587, 15.965965965965964, 16.06606606606607, 16.166166166166164, 16.26626626626627, 16.366366366366364, 16.46646646646647, 16.566566566566564, 16.66666666666667, 16.766766766766764, 16.86686686686687, 16.966966966966964, 17.06706706706707, 17.167167167167165, 17.267267267267272, 17.367367367367365, 17.467467467467472, 17.567567567567565, 17.667667667667672, 17.767767767767765, 17.867867867867872, 17.967967967967965, 18.068068068068072, 18.168168168168165, 18.268268268268272, 18.36836836836838, 18.468468468468473, 18.56856856856858, 18.668668668668673, 18.76876876876878, 18.868868868868873, 18.96896896896898, 19.069069069069073, 19.16916916916918, 19.269269269269273, 19.36936936936938, 19.469469469469473, 19.56956956956958, 19.669669669669673, 19.76976976976978, 19.869869869869873, 19.96996996996998, 20.070070070070074, 20.17017017017018, 20.270270270270274, 20.37037037037038, 20.470470470470474, 20.57057057057058, 20.670670670670674, 20.77077077077078, 20.870870870870874, 20.97097097097098, 21.071071071071074, 21.17117117117118, 21.271271271271274, 21.37137137137138, 21.471471471471475, 21.57157157157158, 21.671671671671675, 21.771771771771782, 21.871871871871875, 21.971971971971982, 22.072072072072075, 22.172172172172182, 22.272272272272275, 22.372372372372382, 22.472472472472475, 22.572572572572582, 22.672672672672675, 22.772772772772782, 22.872872872872875, 22.972972972972983, 23.073073073073076, 23.173173173173183, 23.273273273273276, 23.373373373373383, 23.473473473473476, 23.573573573573583, 23.673673673673676, 23.773773773773783, 23.873873873873876, 23.973973973973983, 24.074074074074076, 24.174174174174183, 24.274274274274276, 24.374374374374383, 24.474474474474476, 24.574574574574584, 24.674674674674677, 24.774774774774784, 24.874874874874877, 24.974974974974984, 25.075075075075077, 25.175175175175184, 25.275275275275277, 25.375375375375384, 25.475475475475477, 25.575575575575584, 25.675675675675677, 25.775775775775784, 25.875875875875877, 25.975975975975985, 26.076076076076077, 26.176176176176185, 26.276276276276278, 26.376376376376385, 26.476476476476478, 26.576576576576585, 26.676676676676678, 26.776776776776785, 26.876876876876878, 26.976976976976985, 27.077077077077078, 27.177177177177185, 27.27727727727728, 27.377377377377385, 27.47747747747748, 27.577577577577586, 27.67767767767768, 27.777777777777786, 27.87787787787788, 27.977977977977986, 28.07807807807808, 28.178178178178186, 28.27827827827828, 28.378378378378386, 28.47847847847848, 28.578578578578586, 28.67867867867868, 28.778778778778786, 28.87887887887888, 28.978978978978986, 29.07907907907908, 29.179179179179187, 29.27927927927928, 29.379379379379387, 29.47947947947948, 29.579579579579587, 29.67967967967968, 29.779779779779787, 29.87987987987988, 29.979979979979987, 30.08008008008008, 30.180180180180187, 30.28028028028028, 30.380380380380387, 30.48048048048048, 30.580580580580587, 30.68068068068068, 30.780780780780788, 30.88088088088088, 30.980980980980988, 31.08108108108108, 31.181181181181188, 31.28128128128128, 31.381381381381388, 31.48148148148148, 31.581581581581588, 31.68168168168168, 31.78178178178179, 31.88188188188188, 31.98198198198199, 32.08208208208208, 32.18218218218219, 32.28228228228228, 32.38238238238239, 32.48248248248248, 32.58258258258259, 32.68268268268268, 32.78278278278279, 32.88288288288288, 32.98298298298299, 33.08308308308308, 33.18318318318319, 33.28328328328328, 33.38338338338339, 33.48348348348348, 33.58358358358359, 33.68368368368368, 33.78378378378379, 33.88388388388388, 33.98398398398399, 34.08408408408408, 34.18418418418419, 34.28428428428428, 34.38438438438439, 34.48448448448448, 34.58458458458459, 34.68468468468468, 34.78478478478479, 34.88488488488488, 34.98498498498499, 35.08508508508508, 35.18518518518519, 35.28528528528528, 35.38538538538539, 35.4854854854855, 35.58558558558559, 35.6856856856857, 35.78578578578579, 35.8858858858859, 35.98598598598599, 36.0860860860861, 36.18618618618619, 36.2862862862863, 36.38638638638639, 36.4864864864865, 36.58658658658659, 36.6866866866867, 36.78678678678679, 36.8868868868869, 36.98698698698699, 37.0870870870871, 37.18718718718719, 37.2872872872873, 37.38738738738739, 37.4874874874875, 37.58758758758759, 37.6876876876877, 37.78778778778779, 37.8878878878879, 37.98798798798799, 38.0880880880881, 38.18818818818819, 38.2882882882883, 38.38838838838839, 38.4884884884885, 38.58858858858859, 38.6886886886887, 38.78878878878879, 38.8888888888889, 38.98898898898899, 39.0890890890891, 39.18918918918919, 39.2892892892893, 39.38938938938939, 39.4894894894895, 39.58958958958959, 39.6896896896897, 39.78978978978979, 39.8898898898899, 39.98998998998999, 40.0900900900901, 40.190190190190194, 40.2902902902903, 40.390390390390394, 40.4904904904905, 40.590590590590594, 40.6906906906907, 40.790790790790794, 40.8908908908909, 40.990990990990994, 41.0910910910911, 41.191191191191194, 41.2912912912913, 41.391391391391394, 41.4914914914915, 41.591591591591595, 41.6916916916917, 41.791791791791795, 41.8918918918919, 41.991991991991995, 42.0920920920921, 42.192192192192195, 42.2922922922923, 42.392392392392395, 42.4924924924925, 42.592592592592595, 42.6926926926927, 42.792792792792795, 42.8928928928929, 42.992992992992995, 43.0930930930931, 43.193193193193196, 43.2932932932933, 43.393393393393396, 43.4934934934935, 43.593593593593596, 43.6936936936937, 43.793793793793796, 43.8938938938939, 43.993993993993996, 44.0940940940941, 44.194194194194196, 44.2942942942943, 44.394394394394396, 44.494494494494504, 44.5945945945946, 44.694694694694704, 44.7947947947948, 44.894894894894904, 44.994994994995, 45.095095095095104, 45.1951951951952, 45.295295295295304, 45.3953953953954, 45.495495495495504, 45.5955955955956, 45.695695695695704, 45.7957957957958, 45.895895895895904, 45.995995995996, 46.096096096096105, 46.1961961961962, 46.296296296296305, 46.3963963963964, 46.496496496496505, 46.5965965965966, 46.696696696696705, 46.7967967967968, 46.896896896896905, 46.996996996997, 47.097097097097105, 47.1971971971972, 47.297297297297305, 47.3973973973974, 47.497497497497505, 47.5975975975976, 47.697697697697706, 47.7977977977978, 47.897897897897906, 47.997997997998, 48.098098098098106, 48.1981981981982, 48.298298298298306, 48.3983983983984, 48.498498498498506, 48.5985985985986, 48.698698698698706, 48.7987987987988, 48.898898898898906, 48.998998998999, 49.09909909909911, 49.1991991991992, 49.29929929929931, 49.3993993993994, 49.49949949949951, 49.5995995995996, 49.69969969969971, 49.7997997997998, 49.89989989989991, 50.0], "expected": ["PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", "PINF", 1.950950950950947, 1.850850850850847, 1.750750750750747, 1.6506506506506469, 1.5505505505505468, 1.4504504504504467, 1.3503503503503467, 1.2502502502502466, 1.1501501501501465, 1.0500500500500465, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -19.588235294116426, -6.615894039734962, -3.980079681274851, -2.8461538461538214, -2.215077605321493, -1.8130671506351987, -1.5345622119815598, -1.3302263648468657, -1.173913043478257, -1.0504731861198706, 0.9034945650058208, 0.7533214422392459, 0.6376999120128329, 0.5467896412504683, 0.4740194385772574, 0.4148655575051709, 0.36613127664125034, 0.3255057646752226, 0.2912850121752919, 0.2621901896305716, -0.11555785812826383, -0.1001786635270833, -0.08741178314855244, -0.07672529683439125, -0.06771213864369029, -0.060057201145924104, -0.05351398363267031, -0.04788777880793291, -0.04302340836655644, -0.03879616843582538, 0.011494580399863048, 0.010103418445643362, 0.008916493040231283, 0.00789885681963836, 0.007022344251020416, 0.006264108387653182, 0.0056055034100637455, 0.005031224496980706, 0.004528640836202559, 0.004087274767409756, -0.0009120449126546164, -0.0008073535778716649, -0.0007167569558413598, -0.0006380901265823778, -0.000569559984744321, -0.0005096749202056081, -0.0004571889693445171, -0.0004110572278328631, -0.0003704000767501968, -0.00033447434310520497, 5.98588981445375e-05, 5.321617185877199e-05, 4.741773657370974e-05, 4.23431558990694e-05, 3.78909799405006e-05, 3.397547720524163e-05, 3.052397474595302e-05, 2.747468511861536e-05, 2.4774924558013228e-05, 2.2379646781545897e-05, -3.3432461030336057e-06, -2.9808376870303262e-06, -2.66263677066879e-06, -2.382668528135858e-06, -2.1358420095127817e-06, -1.917808422312532e-06, -1.724843842870094e-06, -1.5537518604120645e-06, -1.4017825356429845e-06, -1.2665647531663535e-06, 1.6237463520739522e-07, 1.4507403201509953e-07, 1.2981971901228457e-07, 1.1634628586405568e-07, 1.0442570083212859e-07, 9.386164118846985e-08, 8.448474354341845e-08, 7.614861534223004e-08, 6.872647777502754e-08, 6.210833375711858e-08, -6.973341823755043e-09, -6.240097217161399e-09, -5.591522927199867e-09, -5.016987753027345e-09, -4.507300140924063e-09, -4.0544993592970955e-09, -3.6516789318348015e-09, -3.2928370484999914e-09, -2.972749585979018e-09, -2.6868621155961337e-09, 2.6834235898195335e-10, 2.404193002307643e-10, 2.1565924114705527e-10, 1.936753334198645e-10, 1.7413146370326908e-10, 1.5673516001280495e-10, 1.4123155018595363e-10, 1.2739820761243114e-10, 1.1504074659874113e-10, 1.039890521968561e-10, -9.352298666694039e-12, -8.387321005413891e-12, -7.529944960670734e-12, -6.767292933470402e-12, -6.088131794229567e-12, -5.482649933017701e-12, -4.942266260493315e-12, -4.459466338041692e-12, -4.027661579176237e-12, -3.641068101303692e-12, 2.9782895095553427e-13, 2.673129932245899e-13, 2.4015540337085634e-13, 2.1596151956019384e-13, 1.943859550504051e-13, 1.7512609043181392e-13, 1.579164715331893e-13, 1.4252398063183427e-13, 1.2874366886001041e-13, 1.1639515471728117e-13, -8.730743374860211e-15, -7.841426493634057e-15, -7.048899663316113e-15, -6.341963885783804e-15, -5.710791656684821e-15, -5.146749872611732e-15, -4.642246766453972e-15, -4.1905994555696846e-15, -3.7859191946057225e-15, -3.4230118534833866e-15, 2.3708483736033367e-16, 2.1305608697640232e-16, 1.9161772491785592e-16, 1.7247402260058224e-16, 1.5536486696273392e-16, 1.4006125105333005e-16, 1.2636136305229165e-16, 1.1408719071015952e-16, 1.0308157020249137e-16, 9.320561859411708e-17, -5.996168335779789e-18, -5.391074816094883e-18, -4.850675499618536e-18, -4.3676703927369665e-18, -3.935625881128653e-18, -3.548866909858686e-18, -3.202383195146497e-18, -2.8917475629122543e-18, -2.6130447783677274e-18, -2.362809460578621e-18, 1.419064447687015e-19, 1.2764007199975414e-19, 1.1488800137803015e-19, 1.0348110665857649e-19, 9.327007611827012e-20, 8.412298403124795e-20, 7.592317275566153e-20, 6.856740406627161e-20, 6.196424409163564e-20, 5.60326511174311e-20, -3.1555690599255734e-21, -2.8393779708797012e-21, -2.5565351286484498e-21, -2.3033497324361956e-21, -2.0765584486527135e-21, -1.87327372795033e-21, -1.6909386307953222e-21, -1.5272873096000872e-21, -1.3803104111504296e-21, -1.2482247624969344e-21, 6.61730890981482e-23, 5.956192744864204e-23, 5.364408413504549e-23, 4.834344683379509e-23, 4.359262833223084e-23, 3.9331924432079804e-23, 3.550840126681135e-23, 3.207509535343563e-23, 2.899031192658573e-23, 2.6217009022274563e-23, -1.3128654466871866e-24, -1.1820441484182256e-24, -1.0648725680714416e-24, -9.598631237399566e-25, -8.656971905000893e-25, -7.812051421332176e-25, -7.0534884028545915e-25, -6.372062600372385e-25, -5.759579817535008e-25, -5.208753144261483e-25, 2.4714636315091182e-26, 2.2257718169382763e-26, 2.0055979835342874e-26, 1.80817935284655e-26, 1.631064319824226e-26, 1.4720760609406856e-26, 1.329280554037847e-26, 1.2009584563765682e-26, 1.0855803591489483e-26, 9.817849988715605e-27, -4.426072015886972e-28, -3.9870032470907362e-28, -3.5933482240647264e-28, -3.240219360885312e-28, -2.923275384928637e-28, -2.6386580251038384e-28, -2.382936295239558e-28, -2.1530574308096293e-28, -1.9463036577406384e-28, -1.7602540766865664e-28, 7.558587649132347e-30, 6.810215042461973e-30, 6.138956733273951e-30, 5.536558447207508e-30, 4.995682138972391e-30, 4.509800693470567e-30, 4.073105138255194e-30, 3.680422832508229e-30, 3.327145291872163e-30, 3.009164477321472e-30, -1.2335466449095427e-31, -1.1116279967561328e-31, -1.0022289728996228e-31, -9.040161361913665e-32, -8.158031203119657e-32, -7.365338564777149e-32, -6.652677755686097e-32, -6.011667457366029e-32, -5.434835355758082e-32, -4.9155161909243654e-32, 1.9276013420427883e-33, 1.7373911227912673e-33, 1.5666516832679982e-33, 1.4133187000576702e-33, 1.2755542002670514e-33, 1.1517209281486572e-33, 1.0403597060821822e-33, 9.401694295290666e-34, 8.499893802159108e-34, 7.687835807557643e-34, -2.8894071805023944e-35, -2.6047092813606834e-35, -2.3490697654164492e-35, -2.1194207819097324e-35, -1.91302904720045e-35, -1.7274582029167858e-35, -1.5605355381304134e-35, -1.410322554775273e-35, -1.2750889194330178e-35, -1.1532894004556202e-35, 4.161510098576929e-37, 3.752027442635308e-37, 3.3842276121993097e-37, 3.053727056508571e-37, 2.7566178820862074e-37, 2.489414660165518e-37, 2.2490073579024583e-37, 2.032619668344235e-37, 1.8377721023207136e-37, 1.6622492826045084e-37, -5.7677896331003855e-39, -5.20096657919011e-39, -4.691699398428229e-39, -4.2339571178440955e-39, -3.822360137547369e-39, -3.452107797162141e-39, -3.1189142268538934e-39, -2.8189515092928158e-39, -2.5487992963762088e-39, -2.305400127466363e-39, 7.703721734350583e-41, 6.947530107641616e-41, 6.267945993766103e-41, 5.656969064610355e-41, 5.10745931943709e-41, 4.613041916567864e-41, 4.1680228237580507e-41, 3.767314024512798e-41, 3.40636716879617e-41, 3.0811146892227035e-41, -9.928806825856794e-43, -8.955259640449682e-43, -8.080127793094712e-43, -7.293165701613016e-43, -6.5852250990950834e-43, -5.9481342447876665e-43, -5.374590788095971e-43, -4.858066702365027e-43, -4.392723893344947e-43, -3.9733392525502394e-43, 1.2363233048440433e-44, 1.1152209603185508e-44, 1.006336237458769e-44, 9.084009385258116e-45, 8.202821770016065e-45, 7.409675512865703e-45, 6.695519853101751e-45, 6.052260439113707e-45, 5.472655535366148e-45, 4.950223787495368e-45, -1.4890296707845764e-46, -1.3433116875783457e-46, -1.2122671354557888e-46, -1.094377080057855e-46, -9.88284075127729e-47, -8.927745441804153e-47, -8.067631330576713e-47, -7.292788074766253e-47, -6.594524961886503e-47, -5.965061036890648e-47, 1.7365076622816613e-48, 1.566721680647535e-48, 1.4140026358563353e-48, 1.2765883769940765e-48, 1.1529034739188922e-48, 1.0415389285903334e-48, 9.412341452874045e-49, 8.508609021995588e-49, 7.694090969146472e-49, 6.95974064782531e-49, -1.962857780259367e-50, -1.771100037277355e-50, -1.598585973234733e-50, -1.4433335023912533e-50, -1.303569904494137e-50, -1.1777091624424897e-50, -1.064331811882454e-50, -9.621670178164692e-51, -8.700766263596197e-51, -7.870409689055786e-51, 2.152534190890453e-52, 1.942410705422592e-52, 1.7533411598611694e-52, 1.5831619621396432e-52, 1.4299373806620522e-52, 1.2919349689105627e-52, 1.1676037025706115e-52, 1.0555545229744459e-52, 9.545430159935972e-53, 8.634539866743368e-53, -2.2921688928248842e-54, -2.068579467733899e-54, -1.86736036159683e-54, -1.6862176581175795e-54, -1.5230983502606932e-54, -1.3761644460515211e-54, -1.2437699210804403e-54, -1.1244401978182497e-54, -1.0168538685719235e-54, -9.19826411329533e-55, 2.3721530931922595e-56, 2.1409224143520743e-56, 1.9327944944103392e-56, 1.7454051357223753e-56, 1.5766377731308024e-56, 1.4245969430069223e-56, 1.2875846579960747e-56, 1.1640793623446497e-56, 1.0527171798298632e-56, 9.522751991287424e-57, -2.387714387643512e-58, -2.1551197359801442e-58, -1.9457336377753442e-58, -1.7571856494371426e-58, -1.5873529907588469e-58, -1.4343340918464687e-58, -1.2964250268489301e-58, -1.1720985127987673e-58, -1.0599851884558126e-58, -9.588569203894219e-59, 2.3393276840593304e-60, 2.1115882644510466e-60, 1.9065446941155277e-60, 1.721883134650059e-60, 1.5555309210138023e-60, 1.4056308765133127e-60, 1.2705184212386563e-60, 1.1487011638657467e-60, 1.0388407018528855e-60, 9.397363861202611e-61, -2.2324262777546715e-62, -2.0152221431447925e-62, -1.8196384135497142e-62, -1.6434747196927163e-62, -1.4847595194920192e-62, -1.3417257952518178e-62, -1.2127893854236427e-62, -1.0965296595679246e-62, -9.916722780031877e-63, -8.970738067136186e-63, 2.0765057894760817e-64, 1.874585076658917e-64, 1.6927409411999145e-64, 1.528933507198968e-64, 1.3813345785555756e-64, 1.2483052164537756e-64, 1.1283757400881085e-64, 1.020227883573948e-64, 9.226788719831401e-65, 8.34667206012694e-65, -1.8838099631905272e-66, -1.7007246244720347e-66, -1.5358236924802827e-66, -1.3872624490945784e-66, -1.2533872115404913e-66, -1.132715147408116e-66, -1.0239162646829667e-66, -9.257973378927766e-67, -8.372875582074396e-67, -7.574257190184246e-67, 1.6678361568487545e-68, 1.5058232019167299e-68, 1.3598853616882436e-68, 1.2283943384236713e-68, 1.1098901277251648e-68, 1.0030632790419068e-68, 9.067390623107511e-69, 8.198633320386384e-69, 7.414899034036401e-69, 6.707692755820238e-69, -1.4418958342131987e-70, -1.301898273795782e-70, -1.1757779836816806e-70, -1.0621313020100644e-70, -9.596993719178192e-71, -8.673529127935523e-71, -7.840786234926848e-71, -7.089670393852015e-71, -6.412016849018967e-71, -5.800493808021283e-71, 1.2179199771889022e-72, 1.0997233219742927e-72, 9.932320891568596e-73, 8.972639122863715e-73, 8.107581827884488e-73, 7.327632730065084e-73, 6.624251249485485e-73, 5.989770561091337e-73, 5.4173065019902974e-73, 4.900676152232732e-73, -1.005627731058623e-74, -9.080765555041065e-75, -8.201776740360602e-75, -7.40957380037532e-75, -6.69542066098351e-75, -6.051477418357085e-75, -5.470706693807315e-75, -4.946789952370622e-75, -4.4740527060964355e-75, -4.0473976419128067e-75, 8.120979722284117e-77, 7.333533477076125e-77, 6.623935999537545e-77, 5.984343856079373e-77, 5.407718616639501e-77, 4.8877427253489835e-77, 4.418744320380621e-77, 3.9956300343910745e-77, 3.61382491358801e-77, 3.2692186881495235e-77, -6.417145323929783e-79, -5.795161000636574e-79, -5.2346177294020694e-79, -4.729332601499516e-79, -4.2737562904074055e-79, -3.8629069646382864e-79, -3.492311214639384e-79, -3.1579512365794946e-79, -2.856217598944702e-79, -2.5838669917084467e-79, 4.964073960240397e-81, 4.483114760628747e-81, 4.0496289722493718e-81, 3.6588447565783357e-81, 3.3064785250100807e-81, 2.988684104827222e-81, 2.702007288660357e-81, 2.4433451877203973e-81, 2.2099098725381897e-81, 1.9991958413464686e-81, -3.7608831355587474e-83, -3.396633471311787e-83, -3.0683105699458054e-83, -2.7723071951102985e-83, -2.505384666392591e-83, -2.264634555188013e-83, -2.0474444286416182e-83, -1.851467206788019e-83, -1.674593745487092e-83, 3.091690408090221e-85]} diff --git a/lib/node_modules/@stdlib/math/base/special/hyp2f1/test/fixtures/python/edge_cases1.json b/lib/node_modules/@stdlib/math/base/special/hyp2f1/test/fixtures/python/edge_cases1.json new file mode 100644 index 000000000000..2896fe4b7f04 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/hyp2f1/test/fixtures/python/edge_cases1.json @@ -0,0 +1 @@ +{"a": [1.0, 0.3333333333333333, 0.25, 2.0, 2.0, 2.0, 1.0, 0.7235, 0.25, 0.25, 1.5, -10.0, -10.0, -1.0, -1.0, -3.0, -3.0, 0.5], "b": [2.0, 0.6666666666666666, 0.5, -2.0, -3.0, -1.5, 2.0, -1.0, 0.3333333333333333, 0.3333333333333333, -0.5, 900.0, 900.0, 2.0, 2.0, 13.0, 13.0, -269.5], "c": [3.0, 0.8333333333333334, 0.75, -3.0, -2.0, -1.5, 3.0, -5.0, 2.0, 2.0, 3.0, -10.5, 10.5, 1.0, 1.0, 5.0, 5.0, 1.5], "x": [0.0, 0.84375, 0.9876543209876543, 3.0, 3.0, 3.0, 0.0, 0.3, 0.999, -1.0, 0.99, 0.99, 0.99, 1.0, -1.0, 1.0, -1.0, 0.998001], "expected": [1.0, 1.599999999999999, 1.7999999999999985, 14.0, "PINF", 0.25, 1.0, 1.04341, 1.0682644949603064, 0.9665658449252437, 0.6840303684391167, 2.5101757354622962e+22, 5.5748237303615763e+17, -1.0, 3.0, -1.6, 40.0, 0.053963052503373715]} diff --git a/lib/node_modules/@stdlib/math/base/special/hyp2f1/test/fixtures/python/edge_cases2.json b/lib/node_modules/@stdlib/math/base/special/hyp2f1/test/fixtures/python/edge_cases2.json new file mode 100644 index 000000000000..a8aa89889b0c --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/hyp2f1/test/fixtures/python/edge_cases2.json @@ -0,0 +1 @@ +{"a": [112, 10, 10], "b": [5.1, -900.0, -900.0], "c": [-0.9, 10.5, -10.5], "x": [-0.99999, 0.99, 0.99], "expected": [-1.624136104797094e-24, 1.918537057966121e-24, 3.542792000403634e-18]} diff --git a/lib/node_modules/@stdlib/math/base/special/hyp2f1/test/fixtures/python/edge_cases3.json b/lib/node_modules/@stdlib/math/base/special/hyp2f1/test/fixtures/python/edge_cases3.json new file mode 100644 index 000000000000..34e12556d3f4 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/hyp2f1/test/fixtures/python/edge_cases3.json @@ -0,0 +1 @@ +{"a": [-10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -5.0, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0], "b": [-2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -2.5, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4], "c": [-9.0, -9.0, -9.0, -9.0, -9.0, -9.0, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 20.4, 20.4, 20.4, 20.4, 20.4, 20.4, -9.0, -9.0, -9.0, -9.0, -9.0, -9.0, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 20.4, 20.4, 20.4, 20.4, 20.4, 20.4, -9.0, -9.0, -9.0, -9.0, -9.0, -9.0, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 20.4, 20.4, 20.4, 20.4, 20.4, 20.4, -9.0, -9.0, -9.0, -9.0, -9.0, -9.0, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 20.4, 20.4, 20.4, 20.4, 20.4, 20.4, -9.0, -9.0, -9.0, -9.0, -9.0, -9.0, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 20.4, 20.4, 20.4, 20.4, 20.4, 20.4, -9.0, -9.0, -9.0, -9.0, -9.0, -9.0, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 20.4, 20.4, 20.4, 20.4, 20.4, 20.4, -9.0, -9.0, -9.0, -9.0, -9.0, -9.0, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 20.4, 20.4, 20.4, 20.4, 20.4, 20.4, -9.0, -9.0, -9.0, -9.0, -9.0, -9.0, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 20.4, 20.4, 20.4, 20.4, 20.4, 20.4, -9.0, -9.0, -9.0, -9.0, -9.0, -9.0, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 20.4, 20.4, 20.4, 20.4, 20.4, -9.0, -9.0, -9.0, -9.0, -9.0, -9.0, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 20.4, 20.4, 20.4, 20.4, 20.4, 20.4, -9.0, -9.0, -9.0, -9.0, -9.0, -9.0, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 20.4, 20.4, 20.4, 20.4, 20.4, 20.4, -9.0, -9.0, -9.0, -9.0, -9.0, -9.0, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 20.4, 20.4, 20.4, 20.4, 20.4, -9.0, -9.0, -9.0, -9.0, -9.0, -9.0, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 20.4, 20.4, 20.4, 20.4, 20.4, -9.0, -9.0, -9.0, -9.0, -9.0, -9.0, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 20.4, 20.4, 20.4, 20.4, 20.4, 20.4, -9.0, -9.0, -9.0, -9.0, -9.0, -9.0, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 20.4, 20.4, 20.4, 20.4, 20.4, -9.0, -9.0, -9.0, -9.0, -9.0, -9.0, -1.8, -1.8, -1.8, -1.8, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 20.4, 20.4, 20.4, 20.4, 20.4, -9.0, -9.0, -9.0, -9.0, -9.0, -9.0, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 20.4, 20.4, 20.4, 20.4, 20.4, 20.4, -9.0, -9.0, -9.0, -9.0, -9.0, -9.0, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 20.4, 20.4, 20.4, 20.4, 20.4, 20.4, -9.0, -9.0, -9.0, -9.0, -9.0, -9.0, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 20.4, 20.4, 20.4, 20.4, 20.4, 20.4, -9.0, -9.0, -9.0, -9.0, -9.0, -9.0, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 20.4, 20.4, 20.4, 20.4, 20.4, -9.0, -9.0, -9.0, -9.0, -9.0, -9.0, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 20.4, 20.4, 20.4, 20.4, 20.4, 20.4, -9.0, -9.0, -9.0, -9.0, -9.0, -9.0, -1.8, -1.8, -1.8, -1.8, -1.8, -1.8, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 20.4, 20.4, 20.4, 20.4, 20.4, 20.4, -9.0, -9.0, -9.0, -9.0, -9.0, -9.0, -1.8, -1.8, -1.8, -1.8, -1.8, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 20.4, 20.4, 20.4, 20.4, 20.4, 20.4, -9.0, -9.0, -9.0, -9.0, -9.0, -9.0, -1.8, -1.8, -1.8, -1.8, -1.8, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 20.4, 20.4, 20.4, 20.4], "x": [-10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -10.0, -1.01, 0.0, 0.6, 0.95, -10.0, -1.01, -0.99, 0.0, 0.6, 0.95, -1.01, -0.99, 0.0, 0.6], "expected": ["PINF", "PINF", "PINF", 1.0, "PINF", "PINF", -24079735066.182957, -2291.84346396414, -2091.731497205369, 1.0, 155.2070332942432, 512.1143805238588, -47505.76832932691, 0.4313060843999952, 0.38304679551306287, 1.0, 6.242858629282901, 11.664819014650925, -23.41460389781427, 0.13189547101833973, 0.14239991446593636, 1.0, 1.8793133090075513, 2.532144159645901, 12.11111111111111, 2.1222222222222222, 2.1, 1.0, 0.33333333333333337, -0.05555555555555558, 56.55555555555556, 6.611111111111111, 6.5, 1.0, -2.333333333333333, -4.277777777777778, -19.0, -1.02, -0.98, 1.0, 2.2, 2.9, -3.901960784313726, 0.5049019607843137, 0.5147058823529411, 1.0, 1.2941176470588236, 1.465686274509804, "PINF", "PINF", "PINF", 1.0, "PINF", "PINF", 30385553590080.207, 239746.14396828003, 210940.96084820447, 1.0, -1.518798405895177, -0.423256984105889, 37937046.27472527, 16.40282158781611, 15.408786386464593, 1.0, 0.41057709793566455, 0.2971309121507478, 6981.416518887663, 1.8111951024620019, 1.786269497846012, 1.0, 0.7666742342770235, 0.6716749951838735, "PINF", "PINF", "PINF", 1.0, "PINF", "PINF", 2.6943134756051514e+17, 508092226.7516594, 437683053.4574324, 1.0, 118.44432646361211, -49.165709011819956, 260624520438.12, 5140.884980337666, 4601.15457939731, 1.0, 0.00018903116190172744, -1.0283071153687133e-06, 26257598.68214287, 29.51131561185238, 27.7756479342181, 1.0, 0.11120609954396513, 0.03244478862162758, 97.97420634920637, 2.9708942221493766, 2.9201656116582866, 1.0, 0.34592282738095237, 0.11737671579512333, -383018.25505050534, -48.555885990212175, -44.559891375732406, 1.0, 18.656841856060602, 64.10776546747996, -25.488095238095244, -0.34486738191500166, -0.3392775214239121, 1.0, 2.968931339285714, 4.5774756876336955, 1.3150134778674099, 0.46675579830791364, 0.4756914575251626, 1.0, 1.3989821631027937, 1.6612589789582164, 6.555555555555555, 1.5611111111111111, 1.55, 1.0, 0.6666666666666667, 0.4722222222222222, 28.77777777777778, 3.8055555555555554, 3.75, 1.0, -0.6666666666666665, -1.6388888888888888, -9.0, -0.010000000000000009, 0.010000000000000009, 1.0, 1.6, 1.95, -1.450980392156863, 0.7524509803921569, 0.7573529411764706, 1.0, 1.1470588235294117, 1.232843137254902, -492.65079365079373, 0.6325475793642857, 0.6373095634928572, 1.0, 1.4648076190476191, 1.9190034697420635, 19464745.949494954, 754.2084899147728, 697.6415328125001, 1.0, -4.606060606060606, -1.7560270675505072, 1871.3174603174605, 3.067108588413492, 2.9967898265071424, 1.0, 0.5869257142857143, 0.45874028025793656, 21.561247248582212, 1.3011724153511353, 1.2940256887850032, 1.0, 0.8681747510143584, 0.8036528103419859, -368463.08888888883, -0.6498525454757684, -0.5629651268527648, 1.0, 10.737261718186668, 34.36599062533445, 10010798467.16162, 208570.27233539015, 191188.95564534934, 1.0, 95.42974060606075, -15877.930325779678, 668995.5333333333, 81.91291223898511, 77.36136373822877, 1.0, -0.0031620915199999937, -0.00018853755666666701, 3327.576883753861, 5.051171380497275, 4.9102260743844734, 1.0, 0.31153492875746885, 0.1482515912965709, "PINF", "PINF", "PINF", 1.0, "PINF", "PINF", 401.3115996330035, 5.727830313486948, 5.586408515307487, 1.0, 0.10119288512538815, 0.0005590169943749487, 1.3768220885629678, 0.18324274451541558, 0.1976176211286562, 1.0, 1.5723063371593213, 1.935850480783594, 0.7835243345637823, 0.7876881629390955, 1.0, 1.134577443533487, 1.2151325903507053, 3.0, 1.202, 1.198, 1.0, 0.88, 0.81, 11.0, 2.01, 1.99, 1.0, 0.4, 0.050000000000000044, -2.6, 0.6364, 0.6436, 1.0, 1.216, 1.342, 0.11764705882352933, 0.9108823529411765, 0.9126470588235294, 1.0, 1.0529411764705883, 1.0838235294117646, "PINF", "PINF", "PINF", 1.0, "PINF", "PINF", 0.09090909090909091, 0.49751243781094534, 0.5025125628140703, 1.0, 2.5, 19.999999999999982, 8.730806546300515, 1.4113254884137527, 1.4022749969601616, 1.0, 0.8016077855788422, 0.7027218515905682, 2.1913487022322444, 1.0924535637219601, 1.0905585753732348, 1.0, 0.9482528578049167, 0.9191799820388069, "PINF", "PINF", "PINF", 1.0, "PINF", "PINF", 1.9665008108956757e-08, 0.005706228717414593, 0.006144509705799984, 1.0, 880.5541417890707, 4242501142.19516, 138.71254790827138, 5.110435887841933, 5.002974490423454, 1.0, -0.021822942465341902, 0.06988170737413131, 1.7614261400035436, 1.7444141330317497, 1.0, 0.6458180759253609, 0.475081206047281, "PINF", "PINF", "PINF", 1.0, "PINF", "PINF", 7223.444550517013, 20.39011729408668, 19.36023681139891, 1.0, -2.4008350521991972, -109.60344363409705, 61.13872671420176, 2.2578125644772533, 2.22564225375598, 1.0, 0.5669278179041132, 0.40265496980554594, 1.2454910261168253, 1.2401778345408005, 1.0, 0.8753054765198945, 0.8094386568484939, -1.0, 0.798, 0.802, 1.0, 1.12, 1.19, -9.0, -0.010000000000000009, 0.010000000000000009, 1.0, 1.6, 1.95, 4.6, 1.3636, 1.3564, 1.0, 0.784, 0.658, 1.8823529411764706, 1.0891176470588235, 1.0873529411764706, 1.0, 0.9470588235294117, 0.9161764705882353, "PINF", "PINF", "PINF", 1.0, "PINF", "PINF", -0.651081962731712, -0.5445172797757025, -0.5112372082943456, 1.0, 742.4352083542311, 38305689.19272088, 0.27009826016782085, 0.748617978394934, 0.7521396937336332, 1.0, 1.307996113785554, 1.7075179623508192, 0.9209800543014416, 0.9223755986385779, 1.0, 1.0575812882980218, 1.0963494962833231, "PINF", "PINF", "PINF", 1.0, "PINF", "PINF", 0.05820862985444317, 1.0, 36303478.93548813, 1.3929185299975178e+18, 0.00575218217150655, 0.18055277835995323, 0.1846988589174082, 1.0, 15.57249007061542, 42617.29447393199, 0.5786252776388575, 0.5839455930227497, 1.0, 1.5817708987749601, 2.283247143345565, "PINF", "PINF", "PINF", 1.0, "PINF", "PINF", 59869.72211490919, 177.4619968500369, 168.507118451391, 1.0, -131.99100344479535, -528922.9908778413, 401.3115996330035, 5.7278303134869475, 5.586408515307487, 1.0, 0.10119288512538815, 0.0005590169943749487, 25.188374720031792, 1.7569551905927858, 1.7391639705958448, 1.0, 0.6772488606121926, 0.5281610303940901, -4.555555555555555, 0.4388888888888889, 0.44999999999999996, 1.0, 1.3333333333333333, 1.5277777777777777, -26.77777777777778, -1.8055555555555554, -1.75, 1.0, 2.6666666666666665, 3.638888888888889, 11.0, 2.01, 1.99, 1.0, 0.4, 0.050000000000000044, 3.450980392156863, 1.2475490196078431, 1.2426470588235294, 1.0, 0.8529411764705882, 0.767156862745098, "PINF", "PINF", "PINF", 1.0, "PINF", "PINF", -0.08353419265652244, -2.042869924669208, -2.059998995886413, 1.0, 136331.67665422524, 5463862709345.7, 0.09090909090909091, 0.49751243781094534, 0.5025125628140703, 1.0, 2.5, 19.999999999999982, 0.31231583302819604, 0.8060197315453479, 0.8090585278662749, 1.0, 1.1776650101634791, 1.3226775937922093, "PINF", "PINF", "PINF", 1.0, "PINF", "PINF", -5.533085592635573e-05, -0.7615458563603548, -0.7388296643783832, 1.0, 39641245305.197495, 2.117911949843939e+24, 1.9665008108956757e-08, 0.005706228717414593, 0.006144509705799984, 1.0, 880.5541417890707, 4242501142.19516, 0.22917900193296076, 0.2347605917566327, 1.0, 3.7843863065139836, 12.898210811714437, "PINF", "PINF", "PINF", 1.0, "PINF", "PINF", 290992.80931441917, 893.5998258984249, 849.0433138129996, 1.0, -6806.570819087061, -948295068489.6099, 1754.1405556797163, 14.794924482626321, 14.32305432076869, 1.0, -0.02566968302658441, -0.44809210276874006, 89.93509035264425, 2.760525497921027, 2.7147819531818547, 1.0, 0.42524820142966624, 0.2230907142267818, -10.11111111111111, -0.12222222222222223, -0.10000000000000009, 1.0, 1.6666666666666665, 2.0555555555555554, -54.55555555555556, -4.611111111111111, -4.5, 1.0, 4.333333333333333, 6.277777777777778, 21.0, 3.02, 2.98, 1.0, -0.19999999999999996, -0.8999999999999999, 5.901960784313726, 1.4950980392156863, 1.4852941176470589, 1.0, 0.7058823529411764, 0.5343137254901961, "PINF", "PINF", "PINF", 1.0, "PINF", "PINF", -0.032701791132583626, -0.8414687633381505, 1.0, 75483608.47155939, 9.913045025317654e+19, 0.04282460317505117, 0.3153687356940052, 0.31983075108029946, 1.0, 13.465401785714302, 623612.0634920576, 0.17570582913847588, 0.6724658257490882, 0.6768068551393724, 1.0, 1.4289255390787534, 1.949346748033327, "PINF", "PINF", "PINF", 1.0, "PINF", "PINF", -3.0900882477227245e-07, 0.39839696496151483, 1.0, 156750282756516.1, 4.6094714349206136e+32, -9.198518549246854e-13, -6.087721831718218e-05, -6.748843653318489e-05, 1.0, 245653.93278956393, 5.8971216794061176e+16, 0.0605128935123625, 0.06323387211421305, 1.0, 17.421794032432604]} diff --git a/lib/node_modules/@stdlib/math/base/special/hyp2f1/test/fixtures/python/edge_cases4.json b/lib/node_modules/@stdlib/math/base/special/hyp2f1/test/fixtures/python/edge_cases4.json new file mode 100644 index 000000000000..42966ce9126d --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/hyp2f1/test/fixtures/python/edge_cases4.json @@ -0,0 +1 @@ +{"a": [-0.15226830455134222, -0.9131783549548078, -0.4679194588655071, -1.7894868373197306, -1.7438037392788601, -0.23636924172608476, -0.24077587026600522, -1.9424088787449327, -7.294611452886247, -3.0200207398727885, -0.3434688006617477, -0.5895107691482007, -1.1530310152223548, -1.2967388960841908, -0.361094344887978, -0.7317548165813446, -0.5939603959242574, -0.00928558858562667, -1.6859321783507886, -3.1717941437250587, -0.35341879080094896, -0.8908522870166447, -0.05363826209817146, -0.35904243746949627, -5.07047758898129, -1.0188168717430623, -0.40136868659180736, -0.2891894316061827, -0.7501568040775133, -2.879426159018215, -0.4652204504876114, -1.9451393368450693, -0.10901809615496627, -1.252825595346593, -1.2544538678368347, -0.17893243919454216, -4.616278071013241, -0.47565073016915305, -3.9542671735571586, -0.04197190446337906, -0.14544728526693418, -0.03287085556142455, -1.1149740809008897, -0.8256962984331955, -0.6620641078035396, -0.02996729116525909, -0.7323783708281273, -0.30559022881722164, -0.5937116718841147, -0.08232303292559484, -0.8644369794855573, -0.744361875927894, -0.0045349465145478884, -0.8975865236870255, -4.059211214981328, -1.8351584508301744, -24.171174650326773, -7.383285170805502, -1.8482265148854813, -0.25092406136299283, -0.9227147230650592, -0.5426652386132857, -0.1562338665637033, -0.37876350496779976, -0.037609450917786, -0.49265896725108704, -13.562231826110176, -0.09222385658663712, -0.08844861765967438, -1.4455566819285544, -0.8040403065374522, -0.5300629113326125, -0.0784668836955067, -0.1895403267589879, -3.6405121375120073, -0.4325130638483674, -0.6681258043277785, -0.004160544178760661, -0.2692100824163093, -0.46646872206028234, -0.8802837270741077, -4.30669733813242, -0.9255219853624213, -1.2616881114617735, -0.11428790083065343, -1.4937321829113364, -2.271554628551837, -0.46893352951803213, -0.11668768065779855, -0.7509973665391898, -0.6500975055931744, -6.511855556691098, -0.5471455038285729, -0.5928416727500667, -0.6705898787003006, -2.127550705375923, -0.03998652308513062, -1.0916249310247799, -1.6418471076015337, -1.272614854201148, -1.8938761475581734, -0.7227748700454033, -8.497851310263437, -0.11195507134826599, -0.020266197452268875, -0.8235039186417472, -0.08409079146138598, -6.44871290964169, -0.30047221310207917, -0.1542672258479041, -0.5039493545147384, -4.404231860607107, -3.089233945178748, -0.2142386173441635, -0.3299608008597834, -0.14386012238640933, -3.698011040324481, -1.2644133839114042, -1.3742671135860598, -3.6443088403834176, -1.7370736940564218, -0.8394254642194579, -0.2578253016822336, -0.3127890836499596, -1.0430079447494207, -0.052092319655030916, -0.03843843444654871, -0.2972515992290763, -0.8133620867788796, -2.6049314976663362, -0.25304210244673153, -0.13506273003889935, -0.10068190937022203, -0.14098567332175405, -0.29008431017536385, -0.7506777128376021, -0.006281343205382983, -3.661768834245061, -11.451930791082392, -0.7205291033049017, -0.060834701374726796, -0.3099373171255433, -1.3845735770074015, -0.10786989440829142, -0.7091671808837223, -0.23688015492333636, -10.541210148824382, -1.0847572980615579, -0.21753975273828963, -0.0794218899582384, -1.7126994201110017, -1.764805162224373, -1.6009614765292648, -4.148665617183622, -1.0472787409094608, -0.7508836864039332, -0.1620980699148673, -1.2230350747678869, -6.591954565401293, -3.3548673201574433, -2.121814328880103, -0.6907140065382913, -0.4919437540566489, -3.370607812199914, -0.8220620026013146, -0.3551098987889263, -0.29712367855877275, -2.925470476327423, -0.175765871455829, -1.4234991506670567, -0.354461282238143, -1.9397428778316002, -1.7669901233167242, -1.238189577033681, -0.9154356796623033, -0.5741693704421418, -2.4006451582571016, -1.2935199737213194, -0.47877720054937845, -0.02124019152106671, -0.3510851115595126, -1.3980921109427813, -0.5377052237281388, -0.32509860854562245, -0.9792802407804477, -0.09410852776208234, -0.13359916783659398, -1.4366401828350601, -0.09479696817169603, -0.3602292339851607, -0.85544256438953, -0.07524001165963279, -1.9473896002538136, -5.961218791660036, -12.153949821388396, -3.1387351775315615, -0.9322230127368334, -4.914990279869797, -1.3635083653719757, -1.3181757101568117, -0.028358754014534915, -0.4709802487776107, -0.24722606466088015, -0.312553903996605, -0.05987232541694376, -1.5954861190874312, -0.6073348879073037, -1.0570303619966914, -0.9413850328662381, -0.36206936017289637, -0.4838177585133696, -0.4298253354494723, -0.5472037224311583, -14.320208255941864, -0.3656854868148416, -0.008357793579809814, -4.473246627367525, -2.9636403920686627, -0.3350685439804104, -0.9407504620777729, -0.34348231451892364, -0.17296200038525633, -0.4371331339149995, -0.051765218218893905, -1.0167384221703135, -1.5587897776991122, -0.3700335218745401, -0.26473587176999547, -0.3635400485080784, -2.229550432964541, -3.6771888046639303, -0.45005271691804793, -0.0014622888572040083, -0.028993165563456547, -0.10731216223535567, -0.8366236591020813, -0.07793068905181011, -0.2650138167041338, -0.04092611364474186, -0.9105370776440864, -0.01541198123481391, -2.6240753103131937, -0.2761480605415707, -1.5806469405500918, -0.7372462011797731, -0.026280403277924025, -0.7432163494348978, -1.0482816995237325, -0.1444927177279718, -1.899055523490949, -0.880990025359021, -0.7173233788466011, -0.9385094286040461, -1.1654408442391486, -0.20116694789479306, -1.8119709027897608, -2.6479867556942818, -1.3808773020462963, -1.1942737947462758, -0.5314514038790574, -2.6547036779592768, -1.072120713357104, -0.31042653358739547, -0.6270068701020515, -0.3974858631531315, -0.021250546510198642, -0.7741764914186546, -2.546164031495648, -6.518058668834194, -1.1508384599712147, -0.05423223274100164, -0.4216856401575153, -0.02894745167822066, -0.13608841373480374, -0.13490165334144044, -0.7461480440269401, -0.6177510392559371, -2.87436547086932, -1.3384096878884084, -3.7561548974190835, -0.24209320607686324, -0.21864472685830494, -1.229972929723334, -3.6907803438166136, -0.9793992147550477, -0.3060305155175893, -0.8627981228120247, -2.162132200294991, -0.9332032575535638, -0.08724900816972325, -0.2516558278280334, -16.856454811834052, -0.45769370878703985, -0.7669311604997446, -0.6478112206326951, -0.15813324650900307, -0.12837839951062446, -0.5895008572281406, -20.842512432520206, -0.3964144629983788, -1.3037538492948415, -0.13766629203440317, -0.0500940185543699, -0.12114649273884948, -0.12465155438120434, -0.2490445695880601, -0.6701759746673899, -1.689185289879179, -3.1182180053730226, -0.9665634842486601, -2.583764073389381, -0.8357653033557535, -1.20144242873778, -0.6713080569313947, -3.3356290183225834, -0.03643599964958755, -1.770801294238895, -0.11023420622687263, -0.04115201362399956, -0.041370450952880944, -0.036220838778241005, -0.6221640425058172, -0.4135793216781525, -0.07963056945539271, -0.3026327744433801, -58.660164409655266, -0.407464389516778, -3.1883359730369305, -0.7529717935438094, -6.704701900131203, -3.2381666515530316, -1.7380804846326154, -0.021783830144013194, -7.9446307022780704, -0.6303694541265263, -0.16799277472810825, -3.002087905225088, -0.18435539387731126, -0.1046296502435764, -1.3660844647988366, -10.332957848231512, -0.6672403974194931, -0.48035537312083965, -0.015017847662600836, -0.8606325638682308, -8.309856087687955, -4.889166372757629, -0.1458151049664591, -0.9160641251854, -0.42633931736020436, -0.3508325929885956, -0.025171338964113055, -2.8602053675589736, -1.1061183349956267, -0.06292448510162774, -3.277537051367557, -1.7646912668044537, -0.28977890307133247, -2.1173484693889297, -0.6035957083790842, -0.014383192934957378, -0.46064444392662396, -0.48305461512017556, -0.19952255028929078, -2.2617664769250023, -1.4852623872201964, -0.8016411294500583, -0.5724828065226566, -0.5611909065040777, -0.2297824144608327, -0.8575623795777054, -1.5439392841188013, -0.23409871514602942, -0.6364340056089413, -0.07143981592927107, -1.301733661281566, -0.7473415093094598, -31.022613586797718, -0.14028340832834862, -0.008216987799775088, -0.5024474932241272, -4.98788063070105, -2.4809619163954895, -0.533348518506157, -3.722373909122867, -0.18623578016660036, -0.27347708464816756, -1.3090351509623694, -1.3595178247772375, -0.012648015708961902, -0.2515803848075544, -0.7844426396859774, -4.9320756165310975, -0.3178450102899939, -0.08902763777591471, -0.6228047601160753, -1.2275198224488593, -0.26679483446907537, -2.7376278363904523, -3.83045656294554, -1.6529973056390337, -0.22366106637089955, -5.415161893256615, -1.4870840560406529, -4.006635788034224, -0.19784949950098252, -0.5768378302461059, -2.0244443635036973, -6.853766285868184, -0.9668954924304547, -4.0109295692922995, -1.1932834823426792, -0.029693870231085606, -2.3052805445168407, -0.3606590276185908, -5.286528132683257, -0.5525154014295182, -0.09337979623821657, -8.249984515539746, -0.011514073730335639, -1.1223344209935258, -0.10615466987808064, -0.11910132388863537, -1.0118195503965244, -1.2060601443425059, -1.6036560025229303, -0.4465278043140206, -0.1048298587897416, -0.1763180680878904, -1.6237294520747496, -0.03814511676104959, -0.5668342122839884, -0.14209236206748677, -0.9435249813454125, -0.7060505128684726, -0.7474136036400862, -2.1177052662875577, -5.452378794066184, -0.15358325319721833, -1.2974959849119312, -1.2212852545274542, -0.22043067214823875, -4.205776220242896, -0.6598077039902763, -0.7233038086236814, -0.2967119430698828, -0.3173586125593011, -0.3090204250834745, -12.062455814271988, -0.16351674518426584, -1.0815803044832748, -0.7684540634035752, -0.03622379484439886, -0.6850778980323255, -0.16814820041956513, -0.06574377059465175, -2.893886234480072, -0.0186730745541297, -9.05247730253469, -0.3027820316242027, -0.42200708257318387, -0.10197432685417662, -0.09482783460459054, -0.4279960545521342, -0.8975932274507765, -0.09919790394544825, -10.537012694136742, -0.1420411790859195, -1.591880278433214, -0.550733916513642, -1.6491494052953883, -0.27194782815169427, -0.010246412459433474, -0.5143141923639012, -1.248145873745476, -0.04660167584261754, -1.089895920126771, -0.3265317055059973, -0.8170308749423159, -0.18937048426680558, -0.23070869719618026, -5.051598524584552, -2.210273060469395, -0.11046798259965884, -1.0021033420210035], "b": [0.052567601793416685, 0.6386011703394907, 1.8585034991791098, 0.11538043476968252, 0.19764701375746507, 1.357737215135442, 0.2236986267736265, 0.030657528425512615, 0.013941976771891573, 5.087167442588966, 0.25836740986209383, 0.036958632796932234, 0.05105241055949139, 2.566361717253351, 0.41936445210781237, 1.4574726300332754, 5.373242404587774, 63.89563042475882, 0.874682503920851, 0.5117769645099031, 1.1175472923277656, 3.3863247334714854, 0.05092939095244531, 0.7194330814977972, 0.0032989095297941695, 9.664814503217986, 12.244389032995693, 1.2572372848824385, 0.014038635130855903, 2.3622913063419646, 0.15841939843686736, 0.2553475835492065, 3.0886854076272625, 0.6386568655134963, 1.6746266756618144, 0.29622626094271864, 2.4747515028040166, 0.9995041048093047, 0.9827256084947216, 0.3780863177301885, 0.9923550698117536, 0.745983247059167, 0.17598982229424864, 0.12718902537723897, 1.0680190211346772, 0.2345417563857184, 8.478101865137731, 2.405311819929846, 0.5854804728751226, 0.24261674981929104, 0.6796765760131545, 0.1228607832048243, 0.1021978531025356, 0.42677560436576445, 0.9640493794636544, 1.5242654871019758, 0.14111733700468787, 2.369467182888337, 1.4958837216994176, 25.578483076608286, 0.02368744301731973, 6.08294507599619, 1.7501598526938102, 0.763255601040769, 0.13933447292141588, 0.4453401703549762, 3.3312328342919315, 1.2837877561276207, 0.09345919177923312, 0.08955471294564687, 0.5645638094586858, 0.0685869881413117, 3.9405170886276695, 0.14625972972560497, 0.28429280948903224, 0.10216240670552668, 0.7582427993765553, 0.30845605560234546, 0.03880777831864535, 1.2242583765717434, 0.7918939088513774, 0.170419058945958, 1.1559641933430291, 0.08877331344488182, 0.33683539786526473, 1.460981497225458, 0.14244222212216706, 0.03113536204124956, 0.05074968818025716, 1.025982485649545, 2.2546559076635018, 3.148384060109848, 0.7301950133798694, 5.534388008105904, 1.2798043724094992, 0.22905348427187278, 0.10513437621737798, 2.1843721420402096, 0.4381472493060148, 0.34546534919914507, 0.6943033121115467, 1.7542980827897083, 1.1483791219930617, 0.8485105981613146, 23.324564786882604, 1.127308388274201, 1.0607642964415769, 1.7341115320207172, 7.79511951239706, 1.1795591827039784, 7.506325327628465, 0.835751925783639, 9.10668468517615, 1.4766256324630262, 0.03768087901361916, 0.7126568974785294, 0.695178899723838, 12.036423692333544, 1.4089116795136651, 0.041226754206326044, 0.6951067750293847, 0.005618560387131932, 0.523047929099915, 1.376463596230634, 1.6787542216433797, 1.0718911801836533, 1.4129638477030042, 2.8546160517233967, 0.40608879059370295, 0.06647990848966856, 0.5986032956084097, 1.979085628045532, 1.281467322078055, 0.7436442166338695, 0.9628992958491347, 1.5006492046468374, 0.08300195888297512, 0.2267198039702214, 0.01082460755805581, 1.0062489301374256, 0.05033865896447898, 0.13370508936514258, 0.023131050124869823, 0.44326075021452693, 1.3634129596420208, 1.5383511466646476, 0.6298496949913985, 2.5605720901509557, 2.7028939022070513, 5.451130912600774, 0.22902234555751777, 2.427084174767263, 0.9402979780769807, 1.729062862710392, 0.0697344087946612, 2.1667958507215683, 0.45045078153271034, 3.0631254861472863, 0.0690181972792121, 5.229743004121791, 0.597276463265987, 0.6942302966613709, 0.19227228801805052, 0.22901731443118933, 1.1943204027327452, 0.5430360695265539, 1.468669334435178, 0.749101941847188, 1.2210556506551424, 0.846932625668456, 0.017309729344331837, 0.514165072963499, 0.1476801611698011, 1.6513515168689308, 1.3468841604875337, 1.4818197722530195, 1.0423442697155942, 3.709036646619575, 1.6730860916429617, 4.110508265488164, 0.002437594439223645, 0.6204280709921799, 3.1632007151307215, 0.8049578364234531, 1.4885846776386265, 0.36894311285630943, 0.03552733273772768, 0.364780924377488, 0.3769136765532153, 0.6025433980366721, 0.28327840370264745, 2.12021169056192, 2.421756114616576, 2.0827697302988564, 2.5791261437110524, 3.604642392421213, 0.27419254489641, 1.281289106944162, 0.35993871560304846, 0.9780743988234553, 3.03339682045019, 0.4091695494208152, 0.35086745328454483, 0.11509707231651589, 2.1761860853998356, 0.014544272031628225, 0.614207064668443, 3.3321241113925817, 0.9835699650634684, 9.054633591904501, 0.03810304585556712, 1.2606226158689449, 1.5145373548695438, 0.25724038850690256, 0.07653155869354733, 0.7998575445058758, 0.27967318977836, 0.07356041521457035, 0.8660309756425688, 0.019581448928861267, 0.15645569501876988, 0.2317464688126336, 0.9053069094430237, 0.29685462081757596, 0.016303952527467525, 0.9639093501085445, 0.009440373077329145, 0.08850917100663946, 0.06780384226470582, 0.3251176816178214, 0.7623565000390096, 6.436401000709319, 0.34637249196810904, 0.622400598286085, 0.2743574905430808, 0.5801117215604508, 0.6950308984209768, 0.3972365000936078, 0.02166412580506427, 0.295619216366414, 1.9435801632281327, 0.04684026993158463, 0.46471973912445197, 0.12818424141468898, 0.3606754112880002, 1.0294121182547853, 2.9670909411456017, 0.14064190392899034, 0.3143902337257496, 3.191870996959244, 0.22333134746201333, 2.0157193429348923, 0.2849487814715468, 0.026375054628643424, 0.06332610699591634, 0.12307132815110622, 0.4250398798270656, 0.17999953383874767, 2.7554180157450237, 0.38674772500578825, 0.4435804670589887, 0.3003963026879304, 3.006182838751023, 0.06185994438921494, 6.041057023686785, 3.6402015993396377, 3.3794827814024853, 0.6732351355658641, 2.694300827756394, 1.268542841543327, 1.1594743384875614, 10.86499688171235, 0.21959042174141596, 0.9419739709346502, 0.6445833300618558, 0.7942424529195728, 0.4870969302501189, 1.2657949678539349, 0.021041551403946812, 12.962903372750255, 0.04826822783810214, 0.8183022245399718, 0.7385398186362893, 0.6098456654384208, 1.141184082897193, 0.06835991969104827, 0.3287412805080716, 0.0034704532155420686, 1.122888641820742, 0.8974150460725723, 5.0357518347796875, 0.23943453828871641, 0.08590066486454528, 0.12189715637548493, 0.7900092335625999, 2.1583727095227037, 0.2754441951471467, 0.21035878841813793, 0.3325990355113846, 0.27368471988224186, 0.4409406538039624, 0.529891707908112, 0.1831460144821213, 0.2577241049668628, 2.1184009892403624, 0.18894129381858282, 0.5068099993180057, 0.011184090837436544, 0.4274416869815503, 1.5310853366337644, 5.32336384784952, 0.13583809295922133, 2.958108506339768, 0.005004417860281718, 1.2673659612663677, 0.18887330394752744, 0.4655151634997807, 0.5968801380403148, 1.6344475318159253, 1.3734942595877837, 2.2213229042681575, 0.6318107852881627, 28.665392219429485, 0.1364369999327859, 0.0328111415827268, 0.24295768603705925, 0.231027149468787, 0.4500469326209007, 0.07801353116200671, 0.2983492141933126, 0.8715779876641934, 0.43308078992167665, 0.10889225496203081, 0.24357719109469467, 0.11453640774718465, 0.1501173278812904, 1.7733783476393632, 0.8695638172380873, 0.01745888156801878, 0.9702393339206528, 0.12039242972025455, 0.9598061721445859, 0.12347740823629683, 0.4516728121451663, 2.3466048888542366, 0.5771002446107978, 11.248894101170501, 0.6924922473228703, 0.1846444266979399, 0.5363656364903062, 0.29487413622323944, 0.24430804576936271, 0.14675320710685225, 1.4566972648259302, 1.9773919553997605, 0.3749392128540727, 0.2367832611116718, 0.1055945069510209, 0.12423893125096219, 0.050782945950968994, 0.9481182734658957, 0.5186903543113557, 0.4212266876384354, 7.083351273282851, 0.3370344381427437, 3.2580887372892775, 1.3752179494111396, 3.4138051680086887, 1.038817637476761, 0.2878751514672939, 0.3516674817890184, 0.203088780762388, 0.01003405258917045, 2.9863640407774072, 2.2572089628816214, 0.904641177480294, 1.054908930601747, 0.2514170588729967, 0.6287975083200668, 4.062419173177968, 0.1472542961413632, 0.9582336454389466, 0.019131719007325243, 0.2467109918010546, 2.6291068764627967, 0.4775798241172817, 1.6895633707152413, 1.1421229367102383, 2.0725621261567486, 1.780884419790902, 0.5297264455597372, 0.33888888851372534, 3.0513899423987505, 0.9243611150553512, 0.44351450641733714, 1.8054569333908272, 0.36354981792346464, 0.2162935620842501, 0.029830736759713927, 2.148202043419877, 0.01545116031745808, 0.9198842093217123, 0.24256140052519104, 0.9815310692848809, 0.4182506197213187, 1.1100437981462057, 2.3843043044543104, 0.6193965189652169, 1.0434760177239522, 0.0028070682650027656, 1.694940938800432, 0.8287308616280027, 1.173419210120354, 0.1966540477775005, 1.4805214204986576, 0.8702023531485292, 1.7496389178923217, 2.788956738370861, 1.923117878972906, 0.3858195652262586, 0.2836216125511226, 0.2892309753891633, 0.5522907271456297, 0.5509946713155469, 1.5876838900230577, 0.9636409860696329, 2.0830536361492147, 0.3624270626486461, 0.14845217865426386, 0.4651045854866309, 3.125388336480265, 0.9705195364062755, 1.3456892183981073, 5.784439021618976, 1.8332269813027828, 1.6356182552034984, 0.12106870147856297, 2.0177540727951238, 0.5785193624825735, 0.9010763655058338, 0.09536243421776303, 2.3415230738202486, 0.12784774162288493, 0.7354327398620017, 1.3038531204082942, 0.4670730665099636, 1.1687477460598648, 0.7556149306887257, 4.186548815967508, 0.24213311823521977, 0.3249245192055805, 0.009453412325714394, 0.7783762168804551, 0.9863293823044259, 0.5906873248817008, 1.4697300126155564, 0.002272967857672503, 0.5507568153092781, 1.5939704729758932, 0.009056231885439026, 0.7827324947438257, 5.186121008867535, 1.8476996797633327, 2.6748448820569917, 0.5891225781478429, 0.3248125045828747, 1.392737186634458, 0.36328457880251586, 0.3284542178921408, 0.5908098574470997, 2.349022287488827, 1.8728965065538001, 0.16432580531752294, 0.668177623251069, 1.2182444207379572, 0.9771507016409875, 0.8759229481951056, 0.55089589076466, 0.04551637631479544, 0.22940097538302262, 1.6365579851258292, 0.40789295917035395, 1.4028874318405204, 2.4381506957259966, 11.728469590227757], "c": [-4.922255067109977, -0.6207134873179538, -2.0213058762980483, -3.1513274947202623, -1.6087284115894036, -0.5162965458661128, -0.05252932882764183, -0.5278791553834901, -0.16095063902667706, -0.16875633677154278, -0.1391738375297178, -0.3385046656383648, -4.045069041767983, -0.4606430013879861, -0.13987271785515842, -1.5344770352822583, -0.035128768459643744, -0.059210964045545156, -0.026578745275323445, -0.517917938176349, -0.8538644066690586, -0.14311496999509288, -0.6290002867106463, -1.283254921631157, -4.621903940133066, -0.6522166599195642, -9.639672883538584, -0.004315144658724623, -0.5322758727602608, -0.6359427119882757, -0.11636814092764336, -1.0299182426988733, -0.09766084541160369, -0.49721393132736713, -13.75790673776297, -0.09940670598539092, -0.042319079709091545, -0.04797209168980432, -0.06971435911457391, -2.1291698385396396, -0.9389105132981184, -1.7746187383618035, -0.054972994736323555, -9.844524452920659, -3.176359264567779, -0.941800662084257, -4.836143576244428, -0.40280262347649765, -0.5643869930119336, -1.163709041585257, -0.24667831647904248, -1.1228997665398315, -0.5784308561899969, -1.8407470518622402, -0.17897411803701724, -1.4945995441599687, -0.4971447653285779, -0.41877606623349406, -4.508103251593231, -0.11506355508495147, -0.09811486083849297, -0.3781278926141749, -0.682988748229366, -5.862169658159625, -0.2973333291843028, -0.07073807545698596, -6.1220669415365165, -2.657461974959013, -0.017743460154036272, -0.08722487000997092, -2.250677608480601, -0.10447147847183835, -0.7538743809821378, -0.5420381699841685, -0.27657662090326185, -0.039612735784697595, -5.304973828326593, -3.7697619955194392, -1.3489949739059455, -1.0293082811780345, -0.3936838568359886, -10.300183335743453, -1.2877525994397234, -0.5728560754233656, -0.3014169113877452, -0.08555133941634696, -9.860662075447209, -0.14841756687480978, -0.1750280119634957, -1.595521150846535, -5.905197944187051, -0.5906913593113494, -1.06123330212843, -0.32913928515951074, -0.09608691687346993, -1.1432618585956043, -0.3922691387469197, -0.01786023976168427, -0.5886716001056347, -0.6498709713875399, -0.18345718429721614, -0.0011280431489255616, -0.4835019625708388, -0.5987743342398006, -0.05794298534030751, -2.1690275621866473, -0.2009692159573686, -0.006512805299045965, -0.18526226181844074, -0.06038389326334426, -2.208053490653814, -1.3078117246063576, -0.20558694183273607, -0.04495832106809594, -0.44912575984161096, -1.261913561003603, -1.3262603403132882, -0.15409133339217096, -1.455112158718308, -7.1134934938250645, -0.6219582688629959, -0.45469876786962216, -0.015658833188225474, -1.1672005988895786, -0.10421598365173623, -1.1043805416939345, -0.02709731446792163, -0.45765210322395666, -2.6111509217778948, -0.4417148239094095, -0.06368423019184966, -0.039677338870898415, -0.07537462856924848, -1.114004179696796, -0.06559110353718411, -2.287203549605127, -1.7149869237253812, -0.04297359255695765, -0.2962597438888481, -0.3711118960308484, -0.5922131860907616, -0.48961248374878297, -0.5218735586327814, -0.07652867843095645, -0.36616099583006423, -0.014783392566787734, -0.4866811397049926, -3.440054552020853, -1.7102821522087148, -0.21051146348204375, -1.4029891411210422, -0.28705748025967015, -0.5792634961833436, -0.035096272030497255, -0.7902329577656564, -0.2478335874996782, -0.26044725658395307, -0.09398230114482509, -3.4418863702373335, -0.4919782398958492, -2.018380934687598, -0.2482614755125374, -0.23726429921951198, -0.383876022308004, -5.012189037523042, -2.850168978122917, -0.4810248761640332, -0.019945577985636787, -0.07852440211755507, -0.1567938491184988, -0.1989097742321455, -2.1903070680824532, -3.535927624932784, -0.019034516332172124, -0.7643543211702521, -1.98034614529629, -0.4387011308057689, -0.6432373050341424, -0.25196547674293757, -1.0473725038850539, -0.06512685272798757, -2.163383640264959, -1.9985914020121833, -0.15236069116934337, -0.9698662759772751, -2.2905030862996805, -0.5265873028349763, -0.7840647310302298, -0.07989933594688425, -0.5125311353310535, -3.262113813388207, -0.5173583432352349, -0.5196931420911493, -0.15654974029389113, -0.026682295067638195, -0.8923797942767302, -0.7408520034956796, -0.07935678767416654, -1.4651433691900104, -0.14469424796879915, -0.3308213576575616, -0.5473883329014486, -0.9905519172382247, -0.911552079805467, -1.5979770436432421, -0.252560325143131, -0.5714858893338777, -1.1460186612715995, -0.6088595617507613, -1.6501588565246488, -0.26835751327859025, -0.695085698435842, -0.20568141961156727, -0.47822488685147846, -2.025888861052481, -0.07584983617375429, -0.19032926618192736, -1.8464049873848336, -0.7459623310746664, -2.226029910324399, -10.67545178971637, -8.386078945998815, -0.707432905599505, -0.0668755709193769, -1.457524544849436, -0.7399626617290016, -0.49948755351342555, -0.11941069677696192, -38.37614128395048, -3.3477002552598973, -1.9611426981948608, -0.423935789538876, -0.17329681008229003, -0.26176151568591055, -0.9159597208362042, -0.20949762299989527, -1.9209120956635837, -0.012789614709424857, -0.5471300450905168, -1.4178473937747293, -1.1535070908303924, -0.43997789126196074, -1.198363877223942, -0.3567129381572105, -0.192867779399702, -1.7868213399941277, -1.3745375592175364, -1.2640487347803235, -0.02173700846308213, -0.20017303843876033, -0.36225811857499046, -0.7884020614630121, -0.06332620623905338, -0.19254417077646724, -2.05274479191031, -1.5384261144710556, -1.9715236848458706, -0.2617658130229048, -1.749164065560068, -0.18500188659373795, -0.2563180321444394, -2.5262569361164138, -1.4813837827425531, -0.30895720142204564, -0.7480951757615246, -1.2297016819024802, -0.06640505094659765, -0.03755720824483899, -2.7591458209498563, -0.9401814265332744, -2.8898510971231506, -0.06309478434822857, -2.8170021560313407, -0.028479592448719115, -0.18764023267487562, -1.532432823759593, -0.4068916822721331, -0.4105452640827656, -0.2149661538927632, -0.6020418634011073, -0.1457029958688021, -0.039963278857857, -0.35632550205221536, -1.3355711934363597, -4.507001842055485, -0.1323758638959558, -1.3275168488313667, -2.89272831214928, -0.09670767075328701, -10.41055060299243, -1.5485734164332752, -4.241935244115427, -0.02595236663230116, -0.2516221460223209, -2.1710311287933015, -0.23880126433419635, -0.03604068750060696, -0.11263913089353372, -0.011148477826981251, -1.7642852590728024, -0.331476269217273, -1.5176796798251715, -0.038399606687371524, -0.055783748936562016, -1.8245287624815507, -0.3613642867128082, -0.08156658470459366, -0.4139275610188544, -1.0185105466465014, -0.4654193430794815, -0.16279686160979012, -0.47874280710194506, -1.4684240726323061, -0.06961104794561135, -0.6127044791243728, -2.4451326235010447, -27.84089383119358, -0.942933073585513, -0.2511835835305858, -0.0939553235358912, -0.009004090251806263, -0.31672801811925844, -0.555057928258093, -0.02477173113758191, -0.04301884127419853, -0.0157447815659002, -0.6032362431809528, -0.22961509540235636, -0.48125864633905135, -10.281467776886226, -1.9025429339702091, -0.2496126450979641, -0.717666162781611, -0.15807064783855473, -1.8358509860735674, -0.06303945305948533, -2.3640063553895883, -0.20209554531653207, -0.46191883104464804, -0.4509950261547717, -0.07445168658344481, -3.9360594207588635, -0.11356987955110065, -3.891610156407232, -0.007030332920238802, -0.1354904178879024, -0.28097545116193956, -2.526316077547932, -4.02953398003914, -3.638531507339401, -2.8423510338460867, -2.3617489812377586, -0.2153523363273604, -2.4362273383506574, -0.8982031096878293, -14.866219330207434, -0.8751018809538249, -1.020054059835597, -1.0308231523751097, -0.7088066780306548, -0.14680016409776142, -13.032587294637192, -0.06954916412392875, -1.50823656428609, -0.6417427012514192, -0.2573931023383982, -0.1884840239313479, -0.5953647659695334, -4.999914384642194, -0.7666417260947866, -20.185174426979653, -0.45423578718240964, -0.4318620924927601, -0.9328992918353027, -3.8845774493263647, -0.04913580556633934, -0.11847728734969554, -1.3285037513112763, -0.10185764808885045, -0.003042507735014466, -0.6721258794862899, -0.011217114903007586, -0.6673185478548944, -0.031670417694875, -0.1179250721203089, -2.436261174546853, -1.9040088316003745, -0.27279500133710255, -0.4033728249232247, -0.4884017867726047, -0.013928750507825383, -0.8979583238318016, -1.9692727990582308, -0.1946641840046568, -0.405921678349489, -0.5734060733620856, -0.5913950300148658, -0.31057368117490447, -0.0770948945972274, -0.9790135397833306, -0.11571918277048332, -0.15575635808390564, -0.04018938680339912, -2.2672137669163446, -0.12237368441635033, -2.8516017891393033, -0.6030383165047155, -0.09586172321278363, -0.08331816335714404, -0.1829797537063318, -3.351537844451549, -0.4913423479707182, -1.2177129553743335, -0.3907568070500167, -0.9149185148571541, -1.3169231927882268, -0.5892222699836325, -1.589944805474063, -2.2923261815965623, -0.7284670956617512, -0.6875753487567231, -0.8059907028566573, -0.017129069932668717, -19.343782147690625, -2.10938279176452, -0.10324372824795325, -0.11708042548348274, -0.34545911499961957, -0.21515653530639578, -0.17890455537392924, -0.7375336223035032, -0.5465567038803292, -0.06727606588308044, -0.6175342770105012, -0.15790691493607856, -0.5469691953283922, -0.24141192504604514, -0.007050797748012538, -3.29822940327531, -0.3663757807521826, -0.43163520269644406, -3.0560596146693078, -1.594920315945402, -0.698164293680438, -3.715470626833298, -4.417796834790854, -0.5182249683203921, -0.7435642836943201, -0.019503591011437615, -0.1060608679970867, -0.40571828451796277, -2.2220543432977196, -0.4994902768304472, -1.2001803945975462, -0.9686955836978741, -1.0363977297564397, -1.6586353590436564, -0.00015152863886869206, -0.2692751044395554, -1.209266090681513, -0.06558530393777473, -0.6395111782268439, -3.481526170758439, -8.122398734903182, -1.2601028577970874, -1.6187503962325058, -0.32535589330708947, -0.2134102899073118, -1.082343565392995, -0.11382617163911135, -0.5286824979821847, -0.015142948757616459, -1.58728422576998, -0.16590003128518904, -2.401395660341812, -1.702034793335761, -0.1379054355803615, -3.217865771309297, -0.06728946975413952, -0.1625182660067428, -0.364207939697047, -0.13560155867624446, -0.32620035474010467, -0.7491844851174656, -0.12055143549831882], "x": [-0.7540795947065715, -0.03187119944455463, 0.7100067186373971, -0.0892303507517711, -0.47514966682007076, 0.6754743290173086, 0.7632783299854273, -0.7708286937670721, -0.053055335652972824, -0.3903556632302434, -0.18418838454195718, 0.1993306318384105, 0.13817264895997172, 0.7298449445395321, 0.4165848435271633, -0.1361475930614353, -0.3826405096383956, -0.4103845297682063, 0.025890074871284918, 0.30847635577717836, 0.6884146496499524, -0.3064351607481879, 0.9184138114354288, 0.6894323309657526, 0.13362272358332405, -0.851575008231654, 0.3921790687130544, -0.14229428689584744, 0.7869755334061213, 0.6559584964653029, -0.28072821194858166, 0.08896285418053584, 0.5252622024687479, 0.6771510111710188, -0.44476021532263643, 0.21902788846620092, -0.07977148211182783, -0.8456441863052602, -0.2690992747593557, 0.4761788213745901, -0.2800322595172007, 0.026053549911720264, -0.4672379866114129, 0.5796636941269417, -0.2640748121247547, 0.6238609155675354, 0.380540691385139, 0.9611433966812359, 0.059757744525307466, 0.8414662361501155, 0.4149701470128313, -0.26799700318252273, 0.7557005054678858, -0.3390794119939353, -0.9220167709711102, 0.9925144594395874, 0.9322665328596416, -0.573194158042799, 0.6657147068735338, -0.08713213248077012, -0.7944751294862133, -0.0050843588006215246, -0.22888602939082925, 0.7220988134704274, 0.555304497569062, 0.2536677340866884, 0.37027191803198667, -0.5722379993952982, 0.5528490501678198, 0.3254464436461184, -0.5039135259525112, -0.856385519869711, -0.12358252127888214, -0.2853903355417544, -0.23709742573881076, 0.1341623127898255, 0.21667259547705453, -0.5213740764195651, 0.8093541700867215, -0.7239635816183168, 0.32019832834042616, 0.5792197720696162, -0.6754432153209375, 0.6630449875411637, 0.7494611025610569, -0.3022911856772188, -0.27308840307698956, 0.0971771055589794, -0.9784185927156215, 0.03538897388092943, -0.9214771342444585, 0.7960545566389763, -0.828341342915428, -0.2547090416231097, 0.15234515289492023, -0.7213151142039238, -0.6250106381398868, -0.7139890975801078, -0.9208438881890582, -0.24544351822873423, 0.2677806592779519, 0.7289986392043031, 0.7783522282923809, -0.24270689210245044, 0.5473501723401699, -0.6856698902985814, 0.3212236602597156, -0.18896242890811865, -0.8529623922959366, 0.6741515273544634, 0.21390340387383255, -0.01469990064917881, 0.5194630781677183, -0.12727122324989937, 0.7954711692391045, -0.5423684242838844, -0.49855547367287856, 0.37944757328941003, 0.6671949542245061, 0.6939158907980918, 0.06504680158591425, 0.6831751975084808, -0.5821993927653859, 0.18277724963285613, -0.532298471708037, -0.5408643292273161, -0.13129855982543748, 0.9151176818640174, 0.993802462193246, -0.3356079468621107, 0.7972464686394716, 0.9250349835779346, -0.2830178202000695, 0.41049038386493897, -0.11210649633605385, -0.805618325204533, 0.23932050803250293, 0.6637486026718891, 0.9549873358632717, -0.7892456475230849, 0.145763817674897, 0.5224591154514311, -0.1073498035745768, 0.9813599406858518, 0.19754370727715642, 0.5478154591467577, -0.9729990946130731, -0.39439522837464636, -0.9184964948875098, 0.4812705601708276, 0.26746685638045054, -0.8083628130235991, -0.5844707168283323, -0.36095298649393026, -0.88907104715625, -0.29113950908423236, -0.3121818881791516, -0.06704514536803852, -0.6105272294819135, -0.3638561515866001, 0.5560034215085647, -0.29651342621439625, 0.6920204614127863, -0.06220786965901448, -0.3509489320006425, 0.0839751721912323, 0.7064292916863713, 0.6949819885908213, 0.4346337883334752, -0.8884621145235048, -0.5848437704476437, -0.9204920619695152, -0.6981563768056576, -0.26706581524556583, 0.114569163592799, 0.5351234437158006, -0.6944751833190188, -0.8213526778832918, 0.17809203968682996, -0.12910631917566673, -0.06201494983258815, -0.2973272718912625, -0.38691689761253434, 0.5207960532252482, -0.8125738405722249, -0.8465455689328354, 0.25774191794178547, 0.28355300110863646, 0.6656943345729311, -0.6474057523074916, -0.14578736829861016, -0.13499520837294865, -0.07999427720205099, 0.390681311647471, 0.24799047549191533, -0.9709986726330304, -0.061340546200617796, -0.8065341076002759, 0.6360869941494309, -0.5797483987375798, -0.8426451057144901, 0.5740123191040771, 0.6452577701688837, -0.17768684988070027, 0.9582808320492693, 0.36193717231641753, -0.3199833919486763, 0.5450201704986968, -0.9033351139404815, -0.9507248092276215, -0.024393495472818216, -0.2020996734892151, -0.7672310241640996, -0.7566306666294502, -0.892823371272043, -0.346765975535523, 0.16033753922611127, 0.3023031139415657, -0.8667573218180411, -0.07705653555412706, -0.18705305332639988, -0.22115426363656132, -0.4667305919042877, 0.7078404413606105, 0.20373697733360907, -0.14012576450670067, 0.9475983647195849, 0.7916977042031057, -0.852350642375348, -0.9141964536633751, -0.7946352989115397, 0.9176177121943854, -0.40841960116503384, -0.32178240930580726, 0.23579521681863813, 0.7138362697063096, -0.654861797932268, -0.5797109736824109, 0.1835030281101846, -0.5503589890263241, -0.6841705338041835, -0.7420284545909261, 0.4465854729416625, -0.8207187977831403, -0.18133226146185866, 0.7382135869121187, -0.030778846130423032, -0.7082650358307689, 0.29590572853371144, -0.8459298604383918, -0.24558578286666055, -0.7712585732204245, 0.6337628969589861, 0.9247222778674649, -0.1216681044635688, -0.5808492489044623, 0.11253520396499916, 0.15737423469660827, -0.9480527447617142, -0.5132302453794391, -0.8377978344823709, -0.3236945420179227, -0.45363527135037796, -0.25527298400087983, 0.8600418339351188, -0.24571397094687009, -0.4802366613630136, -0.46412121908667103, -0.4049468390147226, -0.6664714363273694, -0.642399664231895, 0.050314433580868956, -0.17254941878805008, -0.07757517756524623, -0.8127842723812699, -0.7867546628481057, -0.22846820389063516, 0.4435492260315508, -0.2870130135528317, -0.8650630248956905, -0.5497639437354693, -0.5074752862672096, -0.004548379764050869, 0.021606206985148813, -0.8218029607996453, -0.8587314281489988, -0.7930351006819245, 0.008501411994556118, -0.5546001671893033, 0.783350683514388, 0.13958987409882306, -0.96659767400888, -0.9091758397263836, 0.2293537815402611, -0.020205124236337024, -0.021228629119526277, -0.16507385880093084, 0.5983473812283653, 0.48089642922287035, 0.008627853885964543, -0.5677725791094042, -0.8922033574366011, -0.7399729723575925, -0.7991318518979851, 0.089240563339128, 0.03845707910421381, -0.07797657230039268, 0.33117651881724575, 0.16033274924527618, -0.8220266990966072, 0.2068534623914, 0.6978478125177348, 0.9727169121668608, -0.4072021730348272, -0.7246150086412371, -0.8710479127107327, -0.40800535925706094, 0.5149442364481178, -0.6515327548765271, 0.5524570810000162, 0.8350483516377343, 0.8281452983234474, 0.870299758696399, -0.552473692835791, -0.5229275197424945, -0.15448489863396908, 0.2212116862794311, -0.8017396330252791, -0.9033378633217077, 0.24299754095026982, -0.8264183299764949, -0.24768558420547504, -0.7811546178150348, 0.2950494897468394, 0.2219323303328713, 0.3170982132333282, -0.24835924437038392, 0.16836793114744375, 0.6305654045322837, -0.030993175598812872, -0.4551947520235702, -0.8564978913006225, 0.9778542765043978, -0.656357383629492, 0.4491765008550028, 0.5359242605298888, -0.5733914628462522, -0.1970870876716997, 0.8154582537826094, 0.15224499931203406, -0.785874110774794, -0.9463396507985486, -0.08381874953527846, -0.16311241930984188, 0.5402024831267982, 0.7882448706503933, -0.16253302942061998, 0.02996157958354151, 0.2968705020474651, -0.46133995681920603, 0.016869635633984137, -0.4502728364573827, 0.42777819721634835, -0.7515703093174633, 0.9811462214230744, -0.12011757615005214, 0.30887035484914716, -0.16444226852132893, -0.8706581015270478, -0.46881988502194205, 0.5053949742037456, -0.44625735830143554, 0.20825164515755845, -0.29019461331993157, 0.07814262272081618, -0.9285036863723406, 0.4572254751521305, 0.5620746115612449, 0.3265459921301519, 0.796129138460338, 0.6235563612330259, 0.5290651896152272, -0.1986367084452192, -0.1704415216583357, 0.014847190772723229, 0.8191654874868921, 0.3949578632431747, 0.6759426275838243, -0.7770018150093594, 0.15074550146614452, -0.5648576006572328, 0.8094466393921864, 0.40124171894023153, 0.00651644232265669, -0.8979886425905295, 0.7280590203745201, 0.9625622450636349, 0.3789825417485928, 0.32054107701616075, 0.25316899404866344, 0.6155699214206334, -0.9624462420534543, -0.8500387198439305, -0.9400568549516437, -0.2189749884186334, 0.725977007177453, 0.8557148407601105, 0.3830325658186433, -0.30210179257339576, 0.3245143733900584, 0.043580068241937386, 0.9661033805019463, 0.11803876825953741, 0.0142670934303184, -0.4315243999570546, -0.1953685626544841, 0.313665158007568, -0.24885682159853317, 0.6258086353705234, -0.39042965100876237, -0.41867388614893697, 0.264741982599364, -0.718674415950044, -0.23069072629621057, -0.7190511738016301, 0.7166682337755712, 0.2909651693230877, 0.524093433776337, 0.5158831668238735, 0.32762108233303944, 0.42587336565682277, -0.3216459461227805, 0.4464555929319265, 0.3253617204803254, 0.5478373742141274, 0.37597462270439497, -0.9477141658934576, -0.8697822287372079, -0.7350926428940081, 0.39651311872817696, -0.774026686163487, 0.09342738587424293, 0.46603439939803915, 0.08140631326040815, -0.38392107362773675, 0.40377045714592263, -0.08011056913579906, -0.6230835710497031, -0.09992546471544816, 0.17310150092555454, -0.008969551411530441, 0.20692479874153813, 0.786593249751139, -0.6967080050725629, -0.6712663899730391, 0.8064519002378281, 0.7132775323104332, 0.19938554806827335, -0.7471068179970872, -0.2343813370080361, 0.31871670468295243, 0.41433873444419733, 0.34802058308623285, 0.5823593855641525, -0.8659324583451071, 0.8549283365168285, 0.6329162382542346, -0.21548076256885884, -0.8822797217764997, 0.8567864906960956, 0.019803425037128397, -0.7426972244859935, 0.6753804488737583, -0.12188878621708654, 0.002674225163785904, 0.3716431219316527, 0.15788557638553025, -0.8611565077543801, -0.4979073053794014, 0.5117265992036648, 0.22559855678188256, 0.07582481137240671, -0.9088961947029122, -0.05888183614667519, 0.01300560999001732], "expected": [0.9987779348194619, 0.9702323113508392, 573.7519782737164, 0.9942622778814196, 0.9275464270119698, 3.968101456024081, 2.4692723136218264, 0.8452409898912756, 0.9589734505717692, -190.0949435887263, 0.8918108679818644, 1.0137623275764263, 1.0020172084549925, -4.661796080073608, 1.5942515509674982, 0.9001596464698289, -23.138246573588948, 0.8741675710979901, 2.411784048862743, 1.154427956797929, 7.415796665689894, -5.040032574563911, 1.047844992552348, -0.589532010357871, 1.0005244043776045, -12.797610131234245, -312787.3604557073, -9.774840001589096, 1.0225906398920794, -5.721963905508406, 0.8372855639781808, 1.1188827418616791, 10.85205319650569, 1.6142473869985057, 0.932924277312854, 1.1348533205720628, -33.70504060727005, -4.987062222825718, -30.449258929934018, 1.0361540722654439, 1.0663164995704588, 1.0003475173044902, -0.7165348457837706, 0.9847296938121498, 0.9369592216172891, 1.1165515935692292, 645.6202006998271, 3118.8511194853045, 1.0385176539238101, 0.26450203098721253, 2.071837518683578, 0.9728238124749797, 1.002829423672581, 0.9298639647843243, -181.56890034383522, 230.13443222231152, 0.5968108772056485, -2872.659767322555, 0.05646882254146245, -1.258281615820072, 0.827853628109642, 0.9561948673127795, 0.9622157388574476, -167.40441248387978, 1.0178115552653453, 1.8812264455332113, 30.695769831217333, 0.9727672599615931, 1.3773586780646476, 1.4380194734662564, 0.8879888566441997, 0.752220399508462, 0.9902959359856282, 0.9887759639729161, -0.4688314334030434, 1.156731877306412, 1.0203691213402835, 0.9998058673120275, 0.9363400241486284, -1.7461582672829115, 1.608011211532939, 1.0469256981587045, 0.3930684693389949, 1.0894429211005874, 1.2833476144385465, -8.137527701324906, 0.9912381631414583, 1.0098757721777758, 0.9778907613653139, 1.0168039718268937, 0.7867018249209642, -1.054974113021075, -0.009087583139686564, -0.715895994390067, 2.4583549853409052, 1.8338234703204344, 0.9956920907368308, -101.4933040040599, -1.13119107604176, 0.8145304431875198, 2.4352224115240144, 1479.3366192215751, -0.2632177662474371, 0.9759885482263199, 43366660.417482644, 0.6379791097895572, 1.2251776010513264, -1095.3492570919495, -1.2383276769079723, 7.238527655340244, 5.983867803299292, 0.9651022336147703, 104.72311451257941, 0.2067849749730972, 1.0529248565245282, 0.9324641067263367, 7.92138283399091, -91.44973132146308, 4.408643307670904, 1.0191966071603746, 1.1125498805337204, 1.008270864073622, -2.8304042739860655, 0.9723445711255245, -8.17774699323335, 0.9203584864031832, 0.7726898037089007, 1572.1219023225492, 5278.95673863035, 0.7948766780464811, 5.9329667468413225, 407.8428707441021, 0.6319563052140262, 0.7568027314758986, 0.5589553792684954, 0.504180604752733, 1.0000346706213188, 4.607344253913161, 0.9975849936638563, -0.20106646763433852, 1.0009077337825196, 1.0752884928340232, 0.9931294343099145, 7.193434860011843, 1.5895542495766117, 31.53242081171903, -18547.419573972125, 0.6920311873801909, 1.000309602419599, 18.37352404948711, 1.0990469564665555, -26.96662393301266, -1.5984629066003244, -259.28171585419113, 0.9117255565393712, -0.6838966216307821, 0.9301944625964872, -1.7582625008990953, 2.3350979001207897, -138.96178999942967, 2.5485570453941757, 0.4768701290029865, 1.4224682279869265, 0.855782232653956, 0.9278567551039132, 1.0056008863464012, 5.733022553796188, 13.875101773183543, 3.108568665620308, -8.130740307256913, 0.9851791242403299, 0.8374286851746282, 0.9551561476646452, -29.892989345222425, 1.194860568694279, -22.729049465335873, -11.077328417211056, -10.854742589928655, 1.6821008951399445, 0.9450856077127793, 0.9992020757390262, 0.8965582163963938, 26.007403077312308, 2.5102402800887678, 0.21330817890127057, 0.9806775869746486, 1.003053369925683, 1.1060730280575006, 1.5993896923870654, 0.8410438932542934, 0.9890950175681357, 0.9718218830453633, 0.07888778032817402, -2.924318842192912, -10.586059583568746, -1658.0787572040158, 0.9790444527533416, -875.6314118658206, 1.3869389583707108, -5.091502225310942, 0.9640385814202735, 1.3932180809548895, 8.728154597320485, 0.9974974251873859, -63091.573538991695, 1.0280693787883004, 0.8300920602161646, 7.235449156444197, -0.2611706121384609, 1.3010786747956289, 0.9983390341075705, 0.8954340306497404, -1.096740419384267, -11252.91085067676, 0.9474188918481681, 0.9771067528923958, 1.6621042436855922, 1.0313679208129156, 0.9877968674005694, 0.999360863679184, 0.9990512850448668, 0.9989259700539218, 0.8816921727526067, 1.3456749663707628, 1.002328647768204, 0.6350878265138298, 1.0282962970994263, 1.288507554600551, 0.9994481654110264, 0.8552397105008793, 103.005612377669, 8664732.664234217, 0.9991008538567272, 0.983587590558776, 1.0248034892198123, 3.013583973157658, 1.0136180573072058, -2.7365361622335294, 1.0003682267916043, 0.8914307218643392, 0.9606596791048919, 0.5151640521326986, 0.8917084377115894, 0.3609861355033717, 0.7591450502309182, -1.4097369800984323, 0.948753039293687, 0.9210357576371814, 1.7531427932496537, -72.79367801817301, 0.8699523065332679, 0.6000582134394564, 3.779381675453608, 1.123801235630592, 0.9991264235823564, 0.952088464167792, 1.0542546290065997, 1.141959327688898, -1.088742987283159, 0.5183776424967227, -9.25810754118102, 0.959201907141137, 0.7107413974802026, 0.9700117984159996, 637481.8479636995, 0.9720884326195434, -14.771391981447106, -34.83173238162768, -501.65254898959165, -1.3037687181102127, 0.996674666807753, 5.466008667481582, 0.9995917383539668, 0.6726419383843141, 0.7784062140165333, 0.6814210960117993, 0.8469678241137962, 0.36378872944874074, 0.9601752842784533, -33886.552147295355, 0.9643066150101933, -0.6735997794945885, 0.9883884245502851, 1.0412493245882164, 0.7948190439743866, 0.8973526001905205, 0.8139910118701269, 1.000022110013534, -4.808519668844591, 279790.1651881931, 0.8965442309690393, -15791340.965640135, -0.11757925854922681, 1.0890861909859033, 0.9952074983439635, 0.9707499336506512, 0.8518278334419754, 1.832492692845003, 10.908822976445805, 1.0005281531996242, -0.1404765132140635, 0.9583061944668398, 0.8736536763403063, 0.6869751772684424, 1.0076504280454246, 1.0051464498571634, 0.6818541954618595, 1.0119896334593363, 3.5547235266063195, -1.5078149655548962, 0.5808904381203682, 1.2021856971372866, 71011.87613887405, 0.9815533749219174, -49.39085629154259, 0.9968889412877072, 0.988023492745552, 1.735141134758204, 0.9248130712237148, 1.9373256278178548, 202.125596084462, 3.2315516172294587, 5.478837481147873e+25, 0.8101004238911513, 0.8976518004162415, -130105.54957557426, 1.0431738584249726, -16.06878827189493, 0.9070696673504491, 1.0523999628585978, 29.017366774366497, 0.12627639783187106, 0.999470439498061, 1.775064301649523, 1.0073246046110713, 1.1532452461600715, 0.48007259186392826, 1.1592225998924142, 1.0053962421359914, 0.9070825908008808, -100.65410099591642, 0.8897959726298221, 2.1712481808848083, 0.9989732698339837, 152.67899525443212, 1.0289379900437676, -29418.455496284645, 0.9912556397175228, 5.982913050765605, 1.0093010926999915, 0.9747266111625815, 0.9965725995800009, 0.8174778894594139, 0.8940539484732289, 4.7875019439411535, -694.6333196336066, 0.8757618073570214, 1.000351593237975, 1.5209399060553508, 0.9849848949703145, 1.0015973858869003, 0.9916109109184257, 2.547780295533174, 0.8919133917358588, 0.1045012464506745, -1.6143675046996464, 3.0194635701535417, 0.6180654141288213, 20.904892632815866, 0.9858963753187805, 1.0092592417343478, 0.6162018800172538, 1.0013237160718043, 1.5092822781942719, 1.00309440037508, -26.143921541318694, 4.655233138157679, 0.6759151198080087, 1.3834031014227035, 1697.1057937817015, 1.1468690434038022, 12.783238686155379, 0.9792076351585935, 0.32501814175269467, 2.1318421185495837, 8.26122037967265, -0.5575801475519222, 2.9404396204711483, -7.293054796342207, 1.0106542136103622, -3.144431927570121, 2.2505230114160693, -91.33781487144749, 1.0098877083704534, 0.9587068041028524, 9.786814075732922, 1.0177144105008074, 1.0949168951509056, 1.2430169385276233, -49.25774151320939, 1.1013549841862327, 0.29987612482511317, -222.48705511124325, 0.7006765940211944, -3.9144379059664534, 44.571719071937025, 109.31941971622209, 4.258289931022386, -135.70170198567465, 1.0048500427919131, 1.095653614396125, 0.4027808656124373, 1.0006889457427282, 1.0162500767874718, 1.2934278865868398, 3.9459735516495558, 1.9110847527625698, 0.9587199285128402, -5.537855977616549, 0.9991738653399856, 0.7891957723623886, 1.0215620497497861, -0.8779950053965678, 0.9933520373557455, 0.6596496537816534, 5.398415457037507, 4.276472518489776, 1.1116604868570252, 1.095067260117023, 2.1144289613562397, 2.175742617445591, 0.75088063989221, 3.4314336173428712, 5.055859027574507, 8.018223660384995, 2.224198953173992, -0.8235108047467526, -45819.65114524228, 0.9726496745021932, 1.9913429629709423, 0.7633328450002395, 1.0128948326700622, 1.09978450626912, 1.0614573270920855, 0.8978850776679138, 1.0201310816649638, 0.9490977580811075, 0.9629300688956476, -2417.929513471934, 1.0720665425948723, 0.9922242893088783, 1.0006798618868085, 1.4442171921464304, 0.43156148869047517, 1.37262494690485, -91.6402494812965, 1.00188752834292, 17.004709768037433, -12003.856766268147, 0.9993147009354407, 2.980335080928168, 10.267817283288197, 0.9304242418571004, 1667.4957430619288, 0.5939005444022366, -0.574191657664711, -0.2184196629326168, 0.9550015444713943, 2.005642693697784, 6.028554129717972, 1.13843481408985, -13.255526779305521, 0.9924590670001439, 0.7612647617414757, 1.0016941849596646, 0.9694353483480617, 2.0747083773728523, 0.9305650836976463, 0.7365814611655741, 1.2054216069215589, 1.352186856525951, 1.8913331589411715, -26.331668749748037, 0.9855249949815079, 2.2677201840029673]} diff --git a/lib/node_modules/@stdlib/math/base/special/hyp2f1/test/fixtures/python/outliers.json b/lib/node_modules/@stdlib/math/base/special/hyp2f1/test/fixtures/python/outliers.json new file mode 100644 index 000000000000..6cbfb31e9cb0 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/hyp2f1/test/fixtures/python/outliers.json @@ -0,0 +1 @@ +{"a": [-1.8, 1.8, 1.8, 1.8, 1.8, 5.0, 10.0, 10.0, 2.0, 2.0, -1.8, 1.8, 10.0, 10.0, -8.0, -0.1156544430516313, -27.911722328444608, -10.184355055477743, -5.0083982772911, -0.7429095709749414, -14.55029516886238, -5.428179853908536, -1.8190858888165087, -0.9534205693212994, -31.70680212982947, -0.18350917503602782, -200.19574300099214, -8.837706832399117, -3.2052905962805456, -13.37614633859299], "b": [7.4, -2.5, 1.0, 7.4, 7.4, 7.4, 7.4, 7.4, 3.0, 2.5, -2.5, 7.4, 1.0, 7.4, 18.016500331508873, 12.722140489351698, 14.018736008860946, 6.5450429328481174, 171.09919289684245, 11.725525989335528, 0.46553367087834685, 26.782963689614604, 21.025202609254364, 10.024920055648606, 0.11445767340979862, 14.696533286274349, 1.9444493115386567, 0.19096384651567044, 0.3048596186043564, 1.337786902832312], "c": [20.4, 20.4, 20.4, -1.8, 20.4, 20.4, 20.4, 20.4, 5.0, -3.25, 20.4, -1.8, -1.8, -1.8, 10.805295997850628, -0.6030985338257255, -1.0168630024136034, -0.44051751620383994, -1.4923865283013589, -7.299203351011158, -0.5349901418098844, -4.162402828198655, -0.6960141045675334, -0.23845367675425955, -0.5570625216964069, -6.338990250643928, -0.6933677849479691, -2.3808990396202425, -0.7039276707364683, -0.05015281580946018], "x": [-10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, 0.95, 0.99, 0.999, -10.0, -1.01, -0.99, -0.99, 0.90875647507, -0.0005448214561780684, 0.6228483452847298, 0.6555896492302491, 0.7073764056574465, 0.11534401417791407, 0.6086682776938632, 0.10047548647104909, 0.2570211738060222, 0.4419851803780206, 0.020574313007314604, -0.9003519736816863, 0.24492811068225362, -0.27624718180517105, 0.8496565195400692, -0.0022109253176725296], "expected": [16.334204105729413, 5.883122144128727, 0.5820646473844754, 0.010147094307759376, 0.07291374137469146, 0.0011628419587190388, 8.042653908304492e-06, 566.0092271657466, 27.699347904322664, 2.183739328012162e+26, -0.5786871007671348, 0.10921062752340924, -0.8752587026378827, 0.4234752106080307, -3.566216341436626e-09, 0.998681836639102, 5.33299803869569, 1.1177709865124041, 3.491332086988064e+82, 1.132062691110089, -0.0006927158077474787, 98.41698380414908, -221.57018712798285, 43.53554136829992, 1.0540592696289446, 0.5371016318543966, 0.0028040224553278668, -2.4067466563131665, 0.028751519134363426, 0.18419839456905535]} diff --git a/lib/node_modules/@stdlib/math/base/special/hyp2f1/test/fixtures/python/runner.py b/lib/node_modules/@stdlib/math/base/special/hyp2f1/test/fixtures/python/runner.py new file mode 100644 index 000000000000..8127f44d4a68 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/hyp2f1/test/fixtures/python/runner.py @@ -0,0 +1,260 @@ +#!/usr/bin/env python +# +# @license Apache-2.0 +# +# Copyright (c) 2025 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. + +"""Generate fixtures.""" + +import os +import json +import numpy as np +from scipy.special import hyp2f1 + +# For reproducibility: +np.random.seed(1234) + +# Get the file path: +FILE = os.path.realpath(__file__) + +# Extract the directory in which this file resides: +DIR = os.path.dirname(FILE) + +# Outliers: +outliers = [ + (-1.8, 7.4, 20.4, -10), + (1.8, -2.5, 20.4, -10), + (1.8, 1, 20.4, -10), + (1.8, 7.4, -1.8, -10), + (1.8, 7.4, 20.4, -10), + (5, 7.4, 20.4, -10), + (10, 7.4, 20.4, -10), + (10, 7.4, 20.4, 0.95), + (2, 3, 5, 0.99), + (2, 2.5, -3.25, 0.999), + (-1.8, -2.5, 20.4, -10), + (1.8, 7.4, -1.8, -1.01), + (10, 1, -1.8, -0.99), + (10, 7.4, -1.8, -0.99), + (-8, 18.016500331508873, 10.805295997850628, 0.90875647507), + ( + -0.1156544430516313, + 12.722140489351698, + -0.6030985338257255, + -0.0005448214561780684, + ), + (-27.911722328444608, 14.018736008860946, -1.0168630024136034, 0.6228483452847298), + (-10.184355055477743, 6.5450429328481174, -0.44051751620383994, 0.6555896492302491), + (-5.0083982772911, 171.09919289684245, -1.4923865283013589, 0.7073764056574465), + (-0.7429095709749414, 11.725525989335528, -7.299203351011158, 0.11534401417791407), + (-14.55029516886238, 0.46553367087834685, -0.5349901418098844, 0.6086682776938632), + (-5.428179853908536, 26.782963689614604, -4.162402828198655, 0.10047548647104909), + (-1.8190858888165087, 21.025202609254364, -0.6960141045675334, 0.2570211738060222), + (-0.9534205693212994, 10.024920055648606, -0.23845367675425955, 0.4419851803780206), + ( + -31.70680212982947, + 0.11445767340979862, + -0.5570625216964069, + 0.020574313007314604, + ), + (-0.18350917503602782, 14.696533286274349, -6.338990250643928, -0.9003519736816863), + (-200.19574300099214, 1.9444493115386567, -0.6933677849479691, 0.24492811068225362), + ( + -8.837706832399117, + 0.19096384651567044, + -2.3808990396202425, + -0.27624718180517105, + ), + (-3.2052905962805456, 0.3048596186043564, -0.7039276707364683, 0.8496565195400692), + ( + -13.37614633859299, + 1.337786902832312, + -0.05015281580946018, + -0.0022109253176725296, + ), +] + + +def gen(a, b, c, x, name): + """Generate fixture data and write to file. + + # Arguments + + * `a`: domain + * `b`: domain + * `c`: domain + * `x`: domain + * `name::str`: output filename + + # Examples + + ``` python + python> a = linspace(-50, 50, 1000) + python> b = linspace(-50, 50, 1000) + python> c = linspace(-50, 50, 1000) + python> x = linspace(-50, 50, 1000) + python> gen(a, b, c, x, './data.json') + ``` + """ + filtered_data = [ + (ai, bi, ci, xi) + for ai, bi, ci, xi in zip(a, b, c, x) + if (ai, bi, ci, xi) not in outliers + ] + a_f, b_f, c_f, x_f = map(np.array, zip(*filtered_data)) + y = hyp2f1(a_f, b_f, c_f, x_f) + y_f = ["PINF" if np.isinf(val) else val for val in y] + data = { + "a": a_f.tolist(), + "b": b_f.tolist(), + "c": c_f.tolist(), + "x": x_f.tolist(), + "expected": y_f, + } + + # Based on the script directory, create an output filepath: + filepath = os.path.join(DIR, name) + + # Write the data to the output filepath as JSON: + with open(filepath, "w", encoding="utf-8") as outfile: + json.dump(data, outfile) + + +def gen_outliers(name): + """Generate a test fixture including only outlier points. + + # Arguments + + * `name::str`: output filename + + # Examples + + ``` python + python> gen_outliers('./data.json') + ``` + """ + a = np.array([o[0] for o in outliers]) + b = np.array([o[1] for o in outliers]) + c = np.array([o[2] for o in outliers]) + x = np.array([o[3] for o in outliers]) + y = hyp2f1(a, b, c, x) + y = ["PINF" if np.isinf(val) else val for val in y] + data = { + "a": a.tolist(), + "b": b.tolist(), + "c": c.tolist(), + "x": x.tolist(), + "expected": y, + } + + # Based on the script directory, create an output filepath: + filepath = os.path.join(DIR, name) + + # Write the data to the output filepath as JSON: + with open(filepath, "w", encoding="utf-8") as outfile: + json.dump(data, outfile) + + +def main(): + """Generate fixture data.""" + # Basic values: + n = 1000 + a = np.linspace(-50, 50, n, dtype=int) + b = np.linspace(-50, 50, n, dtype=int) + c = np.linspace(-50, 50, n, dtype=int) + x = np.linspace(-50, 50, n) + gen(a, b, c, x, "basic.json") + + # Edge Cases #1 + pts = [ + (1, 2, 3, 0), + (1.0 / 3, 2.0 / 3, 5.0 / 6, 27.0 / 32), + (1.0 / 4, 1.0 / 2, 3.0 / 4, 80.0 / 81), + (2, -2, -3, 3), + (2, -3, -2, 3), + (2, -1.5, -1.5, 3), + (1, 2, 3, 0), + (0.7235, -1, -5, 0.3), + (0.25, 1.0 / 3, 2, 0.999), + (0.25, 1.0 / 3, 2, -1), + (2, 3, 5, 0.99), + (3.0 / 2, -0.5, 3, 0.99), + (2, 2.5, -3.25, 0.999), + (-8, 18.016500331508873, 10.805295997850628, 0.90875647507000001), + (-10, 900, -10.5, 0.99), + (-10, 900, 10.5, 0.99), + (-1, 2, 1, 1.0), + (-1, 2, 1, -1.0), + (-3, 13, 5, 1.0), + (-3, 13, 5, -1.0), + (0.5, 1 - 270.5, 1.5, 0.999**2), + ] + a, b, c, x = zip(*pts) + a = np.array(a) + b = np.array(b) + c = np.array(c) + x = np.array(x) + gen(a, b, c, x, "edge_cases1.json") + + # Edge Cases #2 + pts = [ + (112, 5.1, -0.9, -0.99999), + (10, -900, 10.5, 0.99), + (10, -900, -10.5, 0.99), + ] + a, b, c, x = zip(*pts) + a = np.array(a) + b = np.array(b) + c = np.array(c) + x = np.array(x) + gen(a, b, c, x, "edge_cases2.json") + + # Edge Cases #3 + a_values = [-10, -5, -1.8, 1.8, 5, 10] + b_values = [-2.5, -1, 1, 7.4] + c_values = [-9, -1.8, 5, 20.4] + x_values = [-10, -1.01, -0.99, 0, 0.6, 0.95] + + a_list, b_list, c_list, x_list = [], [], [], [] + + for a in a_values: + for b in b_values: + for c in c_values: + for x in x_values: + a_list.append(a) + b_list.append(b) + c_list.append(c) + x_list.append(x) + + a = np.array(a_list) + b = np.array(b_list) + c = np.array(c_list) + x = np.array(x_list) + gen(a, b, c, x, "edge_cases3.json") + + # Edge Cases #4 + n = 500 + a = np.random.pareto(1.5, n) * (-1) ** np.random.randint(2, n) + b = np.random.pareto(1.5, n) * (-1) ** np.random.randint(2, n) + c = np.random.pareto(1.5, n) * (-1) ** np.random.randint(2, n) + x = 2 * np.random.rand(n) - 1 + gen(a, b, c, x, "edge_cases4.json") + + # Outliers: + gen_outliers("outliers.json") + + +if __name__ == "__main__": + main() diff --git a/lib/node_modules/@stdlib/math/base/special/hyp2f1/test/test.js b/lib/node_modules/@stdlib/math/base/special/hyp2f1/test/test.js new file mode 100644 index 000000000000..115ab92ba165 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/hyp2f1/test/test.js @@ -0,0 +1,296 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2025 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 tape = require( 'tape' ); +var abs = require( '@stdlib/math/base/special/abs' ); +var isnanf = require( '@stdlib/math/base/assert/is-nanf' ); +var EPS = require( '@stdlib/constants/float64/eps' ); +var PINF = require( '@stdlib/constants/float64/pinf' ); +var hyp2f1 = require( './../lib' ); + + +// FIXTURES // + +var basic = require( './fixtures/python/basic.json' ); +var edgeCases1 = require( './fixtures/python/edge_cases1.json' ); +var edgeCases2 = require( './fixtures/python/edge_cases2.json' ); +var edgeCases3 = require( './fixtures/python/edge_cases3.json' ); +var edgeCases4 = require( './fixtures/python/edge_cases4.json' ); +var outliers = require( './fixtures/python/outliers.json' ); + + +// TESTS // + +tape( 'main export is a function', function test( t ) { + t.ok( true, __filename ); + t.strictEqual( typeof hyp2f1, 'function', 'main export is a function' ); + t.end(); +}); + +tape( 'the function returns `1` if `x` is 0', function test( t ) { + var v; + + v = hyp2f1( 1.0, 1.0, 1.0, 0.0 ); + t.strictEqual( v, 1.0, 'returns expected value' ); + + v = hyp2f1( 1.5, 2.5, 3.5, 0.0 ); + t.strictEqual( v, 1.0, 'returns expected value' ); + + v = hyp2f1( -1, 4, 2, 0.0 ); + t.strictEqual( v, 1.0, 'returns expected value' ); + + t.end(); +}); + +tape( 'the function returns `NaN` if provided `NaN`', function test( t ) { + var v; + + v = hyp2f1( NaN, 3.0, 2.0, 0.5 ); + t.equal( isnanf( v ), true, 'returns expected value' ); + + v = hyp2f1( 0.0, NaN, 2.0, 0.5 ); + t.equal( isnanf( v ), true, 'returns expected value' ); + + v = hyp2f1( 0.0, 3.0, NaN, 0.5 ); + t.equal( isnanf( v ), true, 'returns expected value' ); + + v = hyp2f1( 0.0, 3.0, 2.0, NaN ); + t.equal( isnanf( v ), true, 'returns expected value' ); + + t.end(); +}); + +tape( 'the function returns `1` if either `a` or `b` is 0 and `c` is not 0', function test( t ) { + var v; + + v = hyp2f1( 0.0, 3.0, 2.0, 0.5 ); + t.strictEqual( v, 1.0, 'returns expected value' ); + + v = hyp2f1( 0.0, -2.0, 4.0, 0.3 ); + t.strictEqual( v, 1.0, 'returns expected value' ); + + v = hyp2f1( 3.0, 0.0, 2.0, 0.5 ); + t.strictEqual( v, 1.0, 'returns expected value' ); + + v = hyp2f1( -2.0, 0.0, 4.0, 0.3 ); + t.strictEqual( v, 1.0, 'returns expected value' ); + + t.end(); +}); + +tape( 'the function returns `PINF` when `c <= a + b`, `x === 1`, and neither `a` nor `b` are nonpositive integers', function test( t ) { + var v; + + v = hyp2f1( 3.0, 4.0, 7.0, 1.0 ); + t.strictEqual( v, PINF, 'returns expected value' ); + + v = hyp2f1( 3.5, 4.5, 8.0, 1.0 ); + t.strictEqual( v, PINF, 'returns expected value' ); + + v = hyp2f1( 3.5, 4.5, 8.0, 1.0 ); + t.strictEqual( v, PINF, 'returns expected value' ); + + t.end(); +}); + +tape( 'the function correctly evaluates the hypergeometric function', function test( t ) { + var expected; + var delta; + var tol; + var a; + var b; + var c; + var x; + var v; + var i; + + a = basic.a; + b = basic.b; + c = basic.c; + x = basic.x; + expected = basic.expected; + + for ( i = 0; i < x.length; i++ ) { + v = hyp2f1( a[ i ], b[ i ], c[ i ], x[ i ] ); + if ( expected[ i ] === 'PINF' ) { + t.equal( v, PINF, 'returns expected value' ); + continue; + } + delta = abs( v - expected[ i ] ); + tol = EPS * abs( expected[ i ] ); + t.ok( delta <= tol, 'within tolerance. a: ' + a[ i ] + ' b: ' + b[ i ] + ' c: ' + c[ i ] + ' x: ' + x[ i ] + '. Value: ' + v + '. Expected: ' + expected[ i ] + '. Delta: ' + delta + '. Tolerance: ' + tol + '.' ); + } + t.end(); +}); + +tape( 'the function correctly evaluates the hypergeometric function', function test( t ) { + var expected; + var delta; + var tol; + var a; + var b; + var c; + var x; + var v; + var i; + + a = edgeCases1.a; + b = edgeCases1.b; + c = edgeCases1.c; + x = edgeCases1.x; + expected = edgeCases1.expected; + + for ( i = 0; i < x.length; i++ ) { + v = hyp2f1( a[ i ], b[ i ], c[ i ], x[ i ] ); + if ( expected[ i ] === 'PINF' ) { + t.equal( v, PINF, 'returns expected value' ); + continue; + } + delta = abs( v - expected[ i ] ); + tol = EPS * abs( expected[ i ] ); + t.ok( delta <= tol, 'within tolerance. a: ' + a[ i ] + ' b: ' + b[ i ] + ' c: ' + c[ i ] + ' x: ' + x[ i ] + '. Value: ' + v + '. Expected: ' + expected[ i ] + '. Delta: ' + delta + '. Tolerance: ' + tol + '.' ); + } + t.end(); +}); + +tape( 'the function correctly evaluates the hypergeometric function', function test( t ) { + var expected; + var delta; + var tol; + var a; + var b; + var c; + var x; + var v; + var i; + + a = edgeCases2.a; + b = edgeCases2.b; + c = edgeCases2.c; + x = edgeCases2.x; + expected = edgeCases2.expected; + + for ( i = 0; i < x.length; i++ ) { + v = hyp2f1( a[ i ], b[ i ], c[ i ], x[ i ] ); + if ( expected[ i ] === 'PINF' ) { + t.equal( v, PINF, 'returns expected value' ); + continue; + } + delta = abs( v - expected[ i ] ); + tol = 7.0 * EPS * abs( expected[ i ] ); + t.ok( delta <= tol, 'within tolerance. a: ' + a[ i ] + ' b: ' + b[ i ] + ' c: ' + c[ i ] + ' x: ' + x[ i ] + '. Value: ' + v + '. Expected: ' + expected[ i ] + '. Delta: ' + delta + '. Tolerance: ' + tol + '.' ); + } + t.end(); +}); + +tape( 'the function correctly evaluates the hypergeometric function', function test( t ) { + var expected; + var delta; + var tol; + var a; + var b; + var c; + var x; + var v; + var i; + + a = edgeCases3.a; + b = edgeCases3.b; + c = edgeCases3.c; + x = edgeCases3.x; + expected = edgeCases3.expected; + + for ( i = 0; i < x.length; i++ ) { + v = hyp2f1( a[ i ], b[ i ], c[ i ], x[ i ] ); + if ( expected[ i ] === 'PINF' ) { + t.equal( v, PINF, 'returns expected value' ); + continue; + } + delta = abs( v - expected[ i ] ); + tol = 10.0 * EPS * abs( expected[ i ] ); + t.ok( delta <= tol, 'within tolerance. a: ' + a[ i ] + ' b: ' + b[ i ] + ' c: ' + c[ i ] + ' x: ' + x[ i ] + '. Value: ' + v + '. Expected: ' + expected[ i ] + '. Delta: ' + delta + '. Tolerance: ' + tol + '.' ); + } + t.end(); +}); + +tape( 'the function correctly evaluates the hypergeometric function', function test( t ) { + var expected; + var delta; + var tol; + var a; + var b; + var c; + var x; + var v; + var i; + + a = edgeCases4.a; + b = edgeCases4.b; + c = edgeCases4.c; + x = edgeCases4.x; + expected = edgeCases4.expected; + + for ( i = 0; i < x.length; i++ ) { + v = hyp2f1( a[ i ], b[ i ], c[ i ], x[ i ] ); + if ( expected[ i ] === 'PINF' ) { + t.equal( v, PINF, 'returns expected value' ); + continue; + } + delta = abs( v - expected[ i ] ); + tol = 20.0 * EPS * abs( expected[ i ] ); + t.ok( delta <= tol, 'within tolerance. a: ' + a[ i ] + ' b: ' + b[ i ] + ' c: ' + c[ i ] + ' x: ' + x[ i ] + '. Value: ' + v + '. Expected: ' + expected[ i ] + '. Delta: ' + delta + '. Tolerance: ' + tol + '.' ); + } + t.end(); +}); + +tape( 'the function correctly evaluates the hypergeometric function', function test( t ) { + var expected; + var delta; + var tol; + var a; + var b; + var c; + var x; + var v; + var i; + + a = outliers.a; + b = outliers.b; + c = outliers.c; + x = outliers.x; + expected = outliers.expected; + + for ( i = 0; i < x.length; i++ ) { + v = hyp2f1( a[ i ], b[ i ], c[ i ], x[ i ] ); + delta = abs( v - expected[ i ] ); + + /* + * NOTE: the tolerance is set high in this case due to: + * + * 1. The expected values having a very large range, being either very small or very large. + * 2. The function making a large number of internal calls, leading to accumulated numerical errors. + */ + tol = 260000.0 * EPS * abs( expected[ i ] ); + t.ok( delta <= tol, 'within tolerance. a: ' + a[ i ] + ' b: ' + b[ i ] + ' c: ' + c[ i ] + ' x: ' + x[ i ] + '. Value: ' + v + '. Expected: ' + expected[ i ] + '. Delta: ' + delta + '. Tolerance: ' + tol + '.' ); + } + t.end(); +});