zeros.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.createZeros = void 0;
  6. var _is = require("../../utils/is.js");
  7. var _number = require("../../utils/number.js");
  8. var _array = require("../../utils/array.js");
  9. var _factory = require("../../utils/factory.js");
  10. var name = 'zeros';
  11. var dependencies = ['typed', 'config', 'matrix', 'BigNumber'];
  12. var createZeros = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
  13. var typed = _ref.typed,
  14. config = _ref.config,
  15. matrix = _ref.matrix,
  16. BigNumber = _ref.BigNumber;
  17. /**
  18. * Create a matrix filled with zeros. The created matrix can have one or
  19. * multiple dimensions.
  20. *
  21. * Syntax:
  22. *
  23. * math.zeros(m)
  24. * math.zeros(m, format)
  25. * math.zeros(m, n)
  26. * math.zeros(m, n, format)
  27. * math.zeros([m, n])
  28. * math.zeros([m, n], format)
  29. *
  30. * Examples:
  31. *
  32. * math.zeros() // returns []
  33. * math.zeros(3) // returns [0, 0, 0]
  34. * math.zeros(3, 2) // returns [[0, 0], [0, 0], [0, 0]]
  35. * math.zeros(3, 'dense') // returns [0, 0, 0]
  36. *
  37. * const A = [[1, 2, 3], [4, 5, 6]]
  38. * math.zeros(math.size(A)) // returns [[0, 0, 0], [0, 0, 0]]
  39. *
  40. * See also:
  41. *
  42. * ones, identity, size, range
  43. *
  44. * @param {...(number|BigNumber) | Array} size The size of each dimension of the matrix
  45. * @param {string} [format] The Matrix storage format
  46. *
  47. * @return {Array | Matrix} A matrix filled with zeros
  48. */
  49. return typed(name, {
  50. '': function _() {
  51. return config.matrix === 'Array' ? _zeros([]) : _zeros([], 'default');
  52. },
  53. // math.zeros(m, n, p, ..., format)
  54. // TODO: more accurate signature '...number | BigNumber, string' as soon as typed-function supports this
  55. '...number | BigNumber | string': function numberBigNumberString(size) {
  56. var last = size[size.length - 1];
  57. if (typeof last === 'string') {
  58. var format = size.pop();
  59. return _zeros(size, format);
  60. } else if (config.matrix === 'Array') {
  61. return _zeros(size);
  62. } else {
  63. return _zeros(size, 'default');
  64. }
  65. },
  66. Array: _zeros,
  67. Matrix: function Matrix(size) {
  68. var format = size.storage();
  69. return _zeros(size.valueOf(), format);
  70. },
  71. 'Array | Matrix, string': function ArrayMatrixString(size, format) {
  72. return _zeros(size.valueOf(), format);
  73. }
  74. });
  75. /**
  76. * Create an Array or Matrix with zeros
  77. * @param {Array} size
  78. * @param {string} [format='default']
  79. * @return {Array | Matrix}
  80. * @private
  81. */
  82. function _zeros(size, format) {
  83. var hasBigNumbers = _normalize(size);
  84. var defaultValue = hasBigNumbers ? new BigNumber(0) : 0;
  85. _validate(size);
  86. if (format) {
  87. // return a matrix
  88. var m = matrix(format);
  89. if (size.length > 0) {
  90. return m.resize(size, defaultValue);
  91. }
  92. return m;
  93. } else {
  94. // return an Array
  95. var arr = [];
  96. if (size.length > 0) {
  97. return (0, _array.resize)(arr, size, defaultValue);
  98. }
  99. return arr;
  100. }
  101. }
  102. // replace BigNumbers with numbers, returns true if size contained BigNumbers
  103. function _normalize(size) {
  104. var hasBigNumbers = false;
  105. size.forEach(function (value, index, arr) {
  106. if ((0, _is.isBigNumber)(value)) {
  107. hasBigNumbers = true;
  108. arr[index] = value.toNumber();
  109. }
  110. });
  111. return hasBigNumbers;
  112. }
  113. // validate arguments
  114. function _validate(size) {
  115. size.forEach(function (value) {
  116. if (typeof value !== 'number' || !(0, _number.isInteger)(value) || value < 0) {
  117. throw new Error('Parameters in function zeros must be positive integers');
  118. }
  119. });
  120. }
  121. });
  122. // TODO: zeros contains almost the same code as ones. Reuse this?
  123. exports.createZeros = createZeros;