and.js 3.7 KB

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