aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/brick/math/src
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/brick/math/src')
-rw-r--r--vendor/brick/math/src/BigDecimal.php22
-rw-r--r--vendor/brick/math/src/BigInteger.php25
-rw-r--r--vendor/brick/math/src/BigNumber.php42
-rw-r--r--vendor/brick/math/src/BigRational.php16
-rw-r--r--vendor/brick/math/src/Internal/Calculator.php5
-rw-r--r--vendor/brick/math/src/Internal/Calculator/BcMathCalculator.php26
-rw-r--r--vendor/brick/math/src/Internal/Calculator/NativeCalculator.php28
7 files changed, 124 insertions, 40 deletions
diff --git a/vendor/brick/math/src/BigDecimal.php b/vendor/brick/math/src/BigDecimal.php
index 287177140..7707b166e 100644
--- a/vendor/brick/math/src/BigDecimal.php
+++ b/vendor/brick/math/src/BigDecimal.php
@@ -96,7 +96,10 @@ final class BigDecimal extends BigNumber
*/
public static function zero() : BigDecimal
{
- /** @psalm-suppress ImpureStaticVariable */
+ /**
+ * @psalm-suppress ImpureStaticVariable
+ * @var BigDecimal|null $zero
+ */
static $zero;
if ($zero === null) {
@@ -115,7 +118,10 @@ final class BigDecimal extends BigNumber
*/
public static function one() : BigDecimal
{
- /** @psalm-suppress ImpureStaticVariable */
+ /**
+ * @psalm-suppress ImpureStaticVariable
+ * @var BigDecimal|null $one
+ */
static $one;
if ($one === null) {
@@ -134,7 +140,10 @@ final class BigDecimal extends BigNumber
*/
public static function ten() : BigDecimal
{
- /** @psalm-suppress ImpureStaticVariable */
+ /**
+ * @psalm-suppress ImpureStaticVariable
+ * @var BigDecimal|null $ten
+ */
static $ten;
if ($ten === null) {
@@ -677,11 +686,7 @@ final class BigDecimal extends BigNumber
*/
public function toBigInteger() : BigInteger
{
- if ($this->scale === 0) {
- $zeroScaleDecimal = $this;
- } else {
- $zeroScaleDecimal = $this->dividedBy(1, 0);
- }
+ $zeroScaleDecimal = $this->scale === 0 ? $this : $this->dividedBy(1, 0);
return BigInteger::create($zeroScaleDecimal->value);
}
@@ -763,6 +768,7 @@ final class BigDecimal extends BigNumber
* This method is only here to implement interface Serializable and cannot be accessed directly.
*
* @internal
+ * @psalm-suppress RedundantPropertyInitializationCheck
*
* @param string $value
*
diff --git a/vendor/brick/math/src/BigInteger.php b/vendor/brick/math/src/BigInteger.php
index cee3ce82b..0dcc8f3b3 100644
--- a/vendor/brick/math/src/BigInteger.php
+++ b/vendor/brick/math/src/BigInteger.php
@@ -217,6 +217,8 @@ final class BigInteger extends BigNumber
*
* Using the default random bytes generator, this method is suitable for cryptographic use.
*
+ * @psalm-param callable(int): string $randomBytesGenerator
+ *
* @param int $numBits The number of bits.
* @param callable|null $randomBytesGenerator A function that accepts a number of bytes as an integer, and returns a
* string of random bytes of the given length. Defaults to the
@@ -256,6 +258,8 @@ final class BigInteger extends BigNumber
*
* Using the default random bytes generator, this method is suitable for cryptographic use.
*
+ * @psalm-param (callable(int): string)|null $randomBytesGenerator
+ *
* @param BigNumber|int|float|string $min The lower bound. Must be convertible to a BigInteger.
* @param BigNumber|int|float|string $max The upper bound. Must be convertible to a BigInteger.
* @param callable|null $randomBytesGenerator A function that accepts a number of bytes as an integer,
@@ -300,7 +304,10 @@ final class BigInteger extends BigNumber
*/
public static function zero() : BigInteger
{
- /** @psalm-suppress ImpureStaticVariable */
+ /**
+ * @psalm-suppress ImpureStaticVariable
+ * @var BigInteger|null $zero
+ */
static $zero;
if ($zero === null) {
@@ -319,7 +326,10 @@ final class BigInteger extends BigNumber
*/
public static function one() : BigInteger
{
- /** @psalm-suppress ImpureStaticVariable */
+ /**
+ * @psalm-suppress ImpureStaticVariable
+ * @var BigInteger|null $one
+ */
static $one;
if ($one === null) {
@@ -338,7 +348,10 @@ final class BigInteger extends BigNumber
*/
public static function ten() : BigInteger
{
- /** @psalm-suppress ImpureStaticVariable */
+ /**
+ * @psalm-suppress ImpureStaticVariable
+ * @var BigInteger|null $ten
+ */
static $ten;
if ($ten === null) {
@@ -1070,7 +1083,10 @@ final class BigInteger extends BigNumber
if ($signed) {
if ($this->isNegative()) {
- $hex = \bin2hex(~\hex2bin($hex));
+ $bin = \hex2bin($hex);
+ assert($bin !== false);
+
+ $hex = \bin2hex(~$bin);
$hex = self::fromBase($hex, 16)->plus(1)->toBase(16);
$hexLength = \strlen($hex);
@@ -1116,6 +1132,7 @@ final class BigInteger extends BigNumber
* This method is only here to implement interface Serializable and cannot be accessed directly.
*
* @internal
+ * @psalm-suppress RedundantPropertyInitializationCheck
*
* @param string $value
*
diff --git a/vendor/brick/math/src/BigNumber.php b/vendor/brick/math/src/BigNumber.php
index 59fcc7ce5..38c8c554e 100644
--- a/vendor/brick/math/src/BigNumber.php
+++ b/vendor/brick/math/src/BigNumber.php
@@ -67,13 +67,10 @@ abstract class BigNumber implements \Serializable, \JsonSerializable
return new BigInteger((string) $value);
}
- if (\is_float($value)) {
- $value = self::floatToString($value);
- } else {
- $value = (string) $value;
- }
+ /** @psalm-suppress RedundantCastGivenDocblockType We cannot trust the untyped $value here! */
+ $value = \is_float($value) ? self::floatToString($value) : (string) $value;
- $throw = function() use ($value) : void {
+ $throw = static function() use ($value) : void {
throw new NumberFormatException(\sprintf(
'The given value "%s" does not represent a valid number.',
$value
@@ -84,7 +81,7 @@ abstract class BigNumber implements \Serializable, \JsonSerializable
$throw();
}
- $getMatch = function(string $value) use ($matches) : ?string {
+ $getMatch = static function(string $value) use ($matches) : ?string {
return isset($matches[$value]) && $matches[$value] !== '' ? $matches[$value] : null;
};
@@ -93,7 +90,13 @@ abstract class BigNumber implements \Serializable, \JsonSerializable
$denominator = $getMatch('denominator');
if ($numerator !== null) {
- $numerator = self::cleanUp($sign . $numerator);
+ assert($denominator !== null);
+
+ if ($sign !== null) {
+ $numerator = $sign . $numerator;
+ }
+
+ $numerator = self::cleanUp($numerator);
$denominator = self::cleanUp($denominator);
if ($denominator === '0') {
@@ -121,14 +124,14 @@ abstract class BigNumber implements \Serializable, \JsonSerializable
}
if ($point !== null || $exponent !== null) {
- $fractional = $fractional ?? '';
- $exponent = $exponent !== null ? (int) $exponent : 0;
+ $fractional = ($fractional ?? '');
+ $exponent = ($exponent !== null) ? (int) $exponent : 0;
if ($exponent === PHP_INT_MIN || $exponent === PHP_INT_MAX) {
throw new NumberFormatException('Exponent too large.');
}
- $unscaledValue = self::cleanUp($sign . $integral . $fractional);
+ $unscaledValue = self::cleanUp(($sign ?? ''). $integral . $fractional);
$scale = \strlen($fractional) - $exponent;
@@ -142,7 +145,7 @@ abstract class BigNumber implements \Serializable, \JsonSerializable
return new BigDecimal($unscaledValue, $scale);
}
- $integral = self::cleanUp($sign . $integral);
+ $integral = self::cleanUp(($sign ?? '') . $integral);
return new BigInteger($integral);
}
@@ -181,10 +184,11 @@ abstract class BigNumber implements \Serializable, \JsonSerializable
* @return static
*
* @psalm-pure
+ * @psalm-suppress TooManyArguments
+ * @psalm-suppress UnsafeInstantiation
*/
protected static function create(... $args) : BigNumber
{
- /** @psalm-suppress TooManyArguments */
return new static(... $args);
}
@@ -199,6 +203,8 @@ abstract class BigNumber implements \Serializable, \JsonSerializable
* @throws \InvalidArgumentException If no values are given.
* @throws MathException If an argument is not valid.
*
+ * @psalm-suppress LessSpecificReturnStatement
+ * @psalm-suppress MoreSpecificReturnType
* @psalm-pure
*/
public static function min(...$values) : BigNumber
@@ -231,6 +237,8 @@ abstract class BigNumber implements \Serializable, \JsonSerializable
* @throws \InvalidArgumentException If no values are given.
* @throws MathException If an argument is not valid.
*
+ * @psalm-suppress LessSpecificReturnStatement
+ * @psalm-suppress MoreSpecificReturnType
* @psalm-pure
*/
public static function max(...$values) : BigNumber
@@ -263,6 +271,8 @@ abstract class BigNumber implements \Serializable, \JsonSerializable
* @throws \InvalidArgumentException If no values are given.
* @throws MathException If an argument is not valid.
*
+ * @psalm-suppress LessSpecificReturnStatement
+ * @psalm-suppress MoreSpecificReturnType
* @psalm-pure
*/
public static function sum(...$values) : BigNumber
@@ -273,11 +283,7 @@ abstract class BigNumber implements \Serializable, \JsonSerializable
foreach ($values as $value) {
$value = static::of($value);
- if ($sum === null) {
- $sum = $value;
- } else {
- $sum = self::add($sum, $value);
- }
+ $sum = $sum === null ? $value : self::add($sum, $value);
}
if ($sum === null) {
diff --git a/vendor/brick/math/src/BigRational.php b/vendor/brick/math/src/BigRational.php
index ff035c5c0..7fbabd7f1 100644
--- a/vendor/brick/math/src/BigRational.php
+++ b/vendor/brick/math/src/BigRational.php
@@ -108,7 +108,10 @@ final class BigRational extends BigNumber
*/
public static function zero() : BigRational
{
- /** @psalm-suppress ImpureStaticVariable */
+ /**
+ * @psalm-suppress ImpureStaticVariable
+ * @var BigRational|null $zero
+ */
static $zero;
if ($zero === null) {
@@ -127,7 +130,10 @@ final class BigRational extends BigNumber
*/
public static function one() : BigRational
{
- /** @psalm-suppress ImpureStaticVariable */
+ /**
+ * @psalm-suppress ImpureStaticVariable
+ * @var BigRational|null $one
+ */
static $one;
if ($one === null) {
@@ -146,7 +152,10 @@ final class BigRational extends BigNumber
*/
public static function ten() : BigRational
{
- /** @psalm-suppress ImpureStaticVariable */
+ /**
+ * @psalm-suppress ImpureStaticVariable
+ * @var BigRational|null $ten
+ */
static $ten;
if ($ten === null) {
@@ -458,6 +467,7 @@ final class BigRational extends BigNumber
* This method is only here to implement interface Serializable and cannot be accessed directly.
*
* @internal
+ * @psalm-suppress RedundantPropertyInitializationCheck
*
* @param string $value
*
diff --git a/vendor/brick/math/src/Internal/Calculator.php b/vendor/brick/math/src/Internal/Calculator.php
index 44795acbb..99b478193 100644
--- a/vendor/brick/math/src/Internal/Calculator.php
+++ b/vendor/brick/math/src/Internal/Calculator.php
@@ -677,6 +677,9 @@ abstract class Calculator
}
/**
+ * @psalm-suppress InvalidOperand
+ * @see https://github.com/vimeo/psalm/issues/4456
+ *
* @param string $number A positive, binary number.
*
* @return string
@@ -685,7 +688,7 @@ abstract class Calculator
{
$xor = \str_repeat("\xff", \strlen($number));
- $number = $number ^ $xor;
+ $number ^= $xor;
for ($i = \strlen($number) - 1; $i >= 0; $i--) {
$byte = \ord($number[$i]);
diff --git a/vendor/brick/math/src/Internal/Calculator/BcMathCalculator.php b/vendor/brick/math/src/Internal/Calculator/BcMathCalculator.php
index c087245bd..6632b378a 100644
--- a/vendor/brick/math/src/Internal/Calculator/BcMathCalculator.php
+++ b/vendor/brick/math/src/Internal/Calculator/BcMathCalculator.php
@@ -41,6 +41,9 @@ class BcMathCalculator extends Calculator
/**
* {@inheritdoc}
+ *
+ * @psalm-suppress InvalidNullableReturnType
+ * @psalm-suppress NullableReturnStatement
*/
public function divQ(string $a, string $b) : string
{
@@ -49,9 +52,16 @@ class BcMathCalculator extends Calculator
/**
* {@inheritdoc}
+ *
+ * @psalm-suppress InvalidNullableReturnType
+ * @psalm-suppress NullableReturnStatement
*/
public function divR(string $a, string $b) : string
{
+ if (version_compare(PHP_VERSION, '7.2') >= 0) {
+ return \bcmod($a, $b, 0);
+ }
+
return \bcmod($a, $b);
}
@@ -61,7 +71,15 @@ class BcMathCalculator extends Calculator
public function divQR(string $a, string $b) : array
{
$q = \bcdiv($a, $b, 0);
- $r = \bcmod($a, $b);
+
+ if (version_compare(PHP_VERSION, '7.2') >= 0) {
+ $r = \bcmod($a, $b, 0);
+ } else {
+ $r = \bcmod($a, $b);
+ }
+
+ assert($q !== null);
+ assert($r !== null);
return [$q, $r];
}
@@ -76,6 +94,9 @@ class BcMathCalculator extends Calculator
/**
* {@inheritdoc}
+ *
+ * @psalm-suppress InvalidNullableReturnType
+ * @psalm-suppress NullableReturnStatement
*/
public function modPow(string $base, string $exp, string $mod) : string
{
@@ -84,6 +105,9 @@ class BcMathCalculator extends Calculator
/**
* {@inheritDoc}
+ *
+ * @psalm-suppress NullableReturnStatement
+ * @psalm-suppress InvalidNullableReturnType
*/
public function sqrt(string $n) : string
{
diff --git a/vendor/brick/math/src/Internal/Calculator/NativeCalculator.php b/vendor/brick/math/src/Internal/Calculator/NativeCalculator.php
index d248e6849..a5f8a9b48 100644
--- a/vendor/brick/math/src/Internal/Calculator/NativeCalculator.php
+++ b/vendor/brick/math/src/Internal/Calculator/NativeCalculator.php
@@ -53,6 +53,10 @@ class NativeCalculator extends Calculator
*/
public function add(string $a, string $b) : string
{
+ /**
+ * @psalm-var numeric-string $a
+ * @psalm-var numeric-string $b
+ */
$result = $a + $b;
if (is_int($result)) {
@@ -69,11 +73,7 @@ class NativeCalculator extends Calculator
[$aNeg, $bNeg, $aDig, $bDig] = $this->init($a, $b);
- if ($aNeg === $bNeg) {
- $result = $this->doAdd($aDig, $bDig);
- } else {
- $result = $this->doSub($aDig, $bDig);
- }
+ $result = $aNeg === $bNeg ? $this->doAdd($aDig, $bDig) : $this->doSub($aDig, $bDig);
if ($aNeg) {
$result = $this->neg($result);
@@ -95,6 +95,10 @@ class NativeCalculator extends Calculator
*/
public function mul(string $a, string $b) : string
{
+ /**
+ * @psalm-var numeric-string $a
+ * @psalm-var numeric-string $b
+ */
$result = $a * $b;
if (is_int($result)) {
@@ -169,9 +173,11 @@ class NativeCalculator extends Calculator
return [$this->neg($a), '0'];
}
+ /** @psalm-var numeric-string $a */
$na = $a * 1; // cast to number
if (is_int($na)) {
+ /** @psalm-var numeric-string $b */
$nb = $b * 1;
if (is_int($nb)) {
@@ -221,6 +227,8 @@ class NativeCalculator extends Calculator
$e -= $odd;
$aa = $this->mul($a, $a);
+
+ /** @psalm-suppress PossiblyInvalidArgument We're sure that $e / 2 is an int now */
$result = $this->pow($aa, $e / 2);
if ($odd === 1) {
@@ -316,10 +324,14 @@ class NativeCalculator extends Calculator
if ($i < 0) {
$blockLength += $i;
+ /** @psalm-suppress LoopInvalidation */
$i = 0;
}
+ /** @psalm-var numeric-string $blockA */
$blockA = \substr($a, $i, $blockLength);
+
+ /** @psalm-var numeric-string $blockB */
$blockB = \substr($b, $i, $blockLength);
$sum = (string) ($blockA + $blockB + $carry);
@@ -386,10 +398,14 @@ class NativeCalculator extends Calculator
if ($i < 0) {
$blockLength += $i;
+ /** @psalm-suppress LoopInvalidation */
$i = 0;
}
+ /** @psalm-var numeric-string $blockA */
$blockA = \substr($a, $i, $blockLength);
+
+ /** @psalm-var numeric-string $blockB */
$blockB = \substr($b, $i, $blockLength);
$sum = $blockA - $blockB - $carry;
@@ -450,6 +466,7 @@ class NativeCalculator extends Calculator
if ($i < 0) {
$blockALength += $i;
+ /** @psalm-suppress LoopInvalidation */
$i = 0;
}
@@ -463,6 +480,7 @@ class NativeCalculator extends Calculator
if ($j < 0) {
$blockBLength += $j;
+ /** @psalm-suppress LoopInvalidation */
$j = 0;
}