rightLogShift.js 3.5 KB

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