and.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  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 { createMatAlgo06xS0S0 } from '../../type/matrix/utils/matAlgo06xS0S0.js';
  5. import { factory } from '../../utils/factory.js';
  6. import { createMatrixAlgorithmSuite } from '../../type/matrix/utils/matrixAlgorithmSuite.js';
  7. import { andNumber } from '../../plain/number/index.js';
  8. var name = 'and';
  9. var dependencies = ['typed', 'matrix', 'equalScalar', 'zeros', 'not'];
  10. export var createAnd = /* #__PURE__ */factory(name, dependencies, _ref => {
  11. var {
  12. typed,
  13. matrix,
  14. equalScalar,
  15. zeros,
  16. not
  17. } = _ref;
  18. var matAlgo02xDS0 = createMatAlgo02xDS0({
  19. typed,
  20. equalScalar
  21. });
  22. var matAlgo06xS0S0 = createMatAlgo06xS0S0({
  23. typed,
  24. equalScalar
  25. });
  26. var matAlgo11xS0s = createMatAlgo11xS0s({
  27. typed,
  28. equalScalar
  29. });
  30. var matAlgo14xDs = createMatAlgo14xDs({
  31. typed
  32. });
  33. var matrixAlgorithmSuite = createMatrixAlgorithmSuite({
  34. typed,
  35. matrix
  36. });
  37. /**
  38. * Logical `and`. Test whether two values are both defined with a nonzero/nonempty value.
  39. * For matrices, the function is evaluated element wise.
  40. *
  41. * Syntax:
  42. *
  43. * math.and(x, y)
  44. *
  45. * Examples:
  46. *
  47. * math.and(2, 4) // returns true
  48. *
  49. * a = [2, 0, 0]
  50. * b = [3, 7, 0]
  51. * c = 0
  52. *
  53. * math.and(a, b) // returns [true, false, false]
  54. * math.and(a, c) // returns [false, false, false]
  55. *
  56. * See also:
  57. *
  58. * not, or, xor
  59. *
  60. * @param {number | BigNumber | Complex | Unit | Array | Matrix} x First value to check
  61. * @param {number | BigNumber | Complex | Unit | Array | Matrix} y Second value to check
  62. * @return {boolean | Array | Matrix}
  63. * Returns true when both inputs are defined with a nonzero/nonempty value.
  64. */
  65. return typed(name, {
  66. 'number, number': andNumber,
  67. 'Complex, Complex': function ComplexComplex(x, y) {
  68. return (x.re !== 0 || x.im !== 0) && (y.re !== 0 || y.im !== 0);
  69. },
  70. 'BigNumber, BigNumber': function BigNumberBigNumber(x, y) {
  71. return !x.isZero() && !y.isZero() && !x.isNaN() && !y.isNaN();
  72. },
  73. 'Unit, Unit': typed.referToSelf(self => (x, y) => self(x.value || 0, y.value || 0)),
  74. 'SparseMatrix, any': typed.referToSelf(self => (x, y) => {
  75. // check scalar
  76. if (not(y)) {
  77. // return zero matrix
  78. return zeros(x.size(), x.storage());
  79. }
  80. return matAlgo11xS0s(x, y, self, false);
  81. }),
  82. 'DenseMatrix, any': typed.referToSelf(self => (x, y) => {
  83. // check scalar
  84. if (not(y)) {
  85. // return zero matrix
  86. return zeros(x.size(), x.storage());
  87. }
  88. return matAlgo14xDs(x, y, self, false);
  89. }),
  90. 'any, SparseMatrix': typed.referToSelf(self => (x, y) => {
  91. // check scalar
  92. if (not(x)) {
  93. // return zero matrix
  94. return zeros(x.size(), x.storage());
  95. }
  96. return matAlgo11xS0s(y, x, self, true);
  97. }),
  98. 'any, DenseMatrix': typed.referToSelf(self => (x, y) => {
  99. // check scalar
  100. if (not(x)) {
  101. // return zero matrix
  102. return zeros(x.size(), x.storage());
  103. }
  104. return matAlgo14xDs(y, x, self, true);
  105. }),
  106. 'Array, any': typed.referToSelf(self => (x, y) => {
  107. // use matrix implementation
  108. return self(matrix(x), y).valueOf();
  109. }),
  110. 'any, Array': typed.referToSelf(self => (x, y) => {
  111. // use matrix implementation
  112. return self(x, matrix(y)).valueOf();
  113. })
  114. }, matrixAlgorithmSuite({
  115. SS: matAlgo06xS0S0,
  116. DS: matAlgo02xDS0
  117. }));
  118. });