leftShift.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. import { createMatAlgo02xDS0 } from '../../type/matrix/utils/matAlgo02xDS0.js';
  2. import { createMatAlgo11xS0s } from '../../type/matrix/utils/matAlgo11xS0s.js';
  3. import { createMatAlgo14xDs } from '../../type/matrix/utils/matAlgo14xDs.js';
  4. import { createMatAlgo01xDSid } from '../../type/matrix/utils/matAlgo01xDSid.js';
  5. import { createMatAlgo10xSids } from '../../type/matrix/utils/matAlgo10xSids.js';
  6. import { createMatAlgo08xS0Sid } from '../../type/matrix/utils/matAlgo08xS0Sid.js';
  7. import { factory } from '../../utils/factory.js';
  8. import { createMatrixAlgorithmSuite } from '../../type/matrix/utils/matrixAlgorithmSuite.js';
  9. import { createUseMatrixForArrayScalar } from './useMatrixForArrayScalar.js';
  10. import { leftShiftNumber } from '../../plain/number/index.js';
  11. import { leftShiftBigNumber } from '../../utils/bignumber/bitwise.js';
  12. var name = 'leftShift';
  13. var dependencies = ['typed', 'matrix', 'equalScalar', 'zeros', 'DenseMatrix', 'concat'];
  14. export var createLeftShift = /* #__PURE__ */factory(name, dependencies, _ref => {
  15. var {
  16. typed,
  17. matrix,
  18. equalScalar,
  19. zeros,
  20. DenseMatrix,
  21. concat
  22. } = _ref;
  23. var matAlgo01xDSid = createMatAlgo01xDSid({
  24. typed
  25. });
  26. var matAlgo02xDS0 = createMatAlgo02xDS0({
  27. typed,
  28. equalScalar
  29. });
  30. var matAlgo08xS0Sid = createMatAlgo08xS0Sid({
  31. typed,
  32. equalScalar
  33. });
  34. var matAlgo10xSids = createMatAlgo10xSids({
  35. typed,
  36. DenseMatrix
  37. });
  38. var matAlgo11xS0s = createMatAlgo11xS0s({
  39. typed,
  40. equalScalar
  41. });
  42. var matAlgo14xDs = createMatAlgo14xDs({
  43. typed
  44. });
  45. var matrixAlgorithmSuite = createMatrixAlgorithmSuite({
  46. typed,
  47. matrix,
  48. concat
  49. });
  50. var useMatrixForArrayScalar = createUseMatrixForArrayScalar({
  51. typed,
  52. matrix
  53. });
  54. /**
  55. * Bitwise left logical shift of a value x by y number of bits, `x << y`.
  56. * For matrices, the function is evaluated element wise.
  57. * For units, the function is evaluated on the best prefix base.
  58. *
  59. * Syntax:
  60. *
  61. * math.leftShift(x, y)
  62. *
  63. * Examples:
  64. *
  65. * math.leftShift(1, 2) // returns number 4
  66. *
  67. * math.leftShift([1, 2, 4], 4) // returns Array [16, 32, 64]
  68. *
  69. * See also:
  70. *
  71. * leftShift, bitNot, bitOr, bitXor, rightArithShift, rightLogShift
  72. *
  73. * @param {number | BigNumber | Array | Matrix} x Value to be shifted
  74. * @param {number | BigNumber} y Amount of shifts
  75. * @return {number | BigNumber | Array | Matrix} `x` shifted left `y` times
  76. */
  77. return typed(name, {
  78. 'number, number': leftShiftNumber,
  79. 'BigNumber, BigNumber': leftShiftBigNumber,
  80. 'SparseMatrix, number | BigNumber': typed.referToSelf(self => (x, y) => {
  81. // check scalar
  82. if (equalScalar(y, 0)) {
  83. return x.clone();
  84. }
  85. return matAlgo11xS0s(x, y, self, false);
  86. }),
  87. 'DenseMatrix, number | BigNumber': typed.referToSelf(self => (x, y) => {
  88. // check scalar
  89. if (equalScalar(y, 0)) {
  90. return x.clone();
  91. }
  92. return matAlgo14xDs(x, y, self, false);
  93. }),
  94. 'number | BigNumber, SparseMatrix': typed.referToSelf(self => (x, y) => {
  95. // check scalar
  96. if (equalScalar(x, 0)) {
  97. return zeros(y.size(), y.storage());
  98. }
  99. return matAlgo10xSids(y, x, self, true);
  100. }),
  101. 'number | BigNumber, DenseMatrix': typed.referToSelf(self => (x, y) => {
  102. // check scalar
  103. if (equalScalar(x, 0)) {
  104. return zeros(y.size(), y.storage());
  105. }
  106. return matAlgo14xDs(y, x, self, true);
  107. })
  108. }, useMatrixForArrayScalar, matrixAlgorithmSuite({
  109. SS: matAlgo08xS0Sid,
  110. DS: matAlgo01xDSid,
  111. SD: matAlgo02xDS0
  112. }));
  113. });