Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 9faf91f

Browse files
committed
Convert all data types, converted all algebra functions. Fixes in order of importing factories.
1 parent 75b18b1 commit 9faf91f

134 files changed

Lines changed: 1809 additions & 1723 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

src/core/function/import.js

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import { isBigNumber, isComplex, isFraction, isMatrix, isUnit } from '../../utils/is'
44
import { isFactory, sortFactories } from '../../utils/factory'
55
import { isLegacyFactory, lazy, traverse } from '../../utils/object'
6-
import { last, initial } from '../../utils/array'
6+
import { contains, initial, last } from '../../utils/array'
77
import ArgumentsError from '../../error/ArgumentsError'
88

99
export function importFactory (typed, load, math) {
@@ -313,7 +313,10 @@ export function importFactory (typed, load, math) {
313313
const existing = namespace.hasOwnProperty(name) ? namespace[name] : undefined
314314

315315
const resolver = function () {
316-
let instance = factory(math)
316+
let instance = contains(factory.dependencies, 'scope') // TODO: this is a special case for Chain and physicalConstants. Find a nicer solution
317+
? factory({ ...math, scope: math }) // TODO: this is probably inefficient. Use Object.create instead?
318+
: factory(math)
319+
317320
if (instance && typeof instance.transform === 'function') {
318321
throw new Error('Transforms cannot be attached to factory functions. ' +
319322
'Please create a separate function for it with exports.path="expression.transform"')
@@ -335,7 +338,8 @@ export function importFactory (typed, load, math) {
335338
}
336339

337340
if (!options.silent) {
338-
throw new Error('Cannot import "' + name + '": already exists')
341+
// console.log('math', JSON.stringify(Object.keys(math)))
342+
throw new Error('Cannot import "' + fullName + '": already exists')
339343
}
340344
}
341345

src/expression/function/index.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
'use strict'
2-
module.exports = [
2+
3+
import { createParse } from './parse'
4+
5+
export default [
36
require('./compile'),
47
require('./eval'),
58
require('./help'),
6-
require('./parse'),
9+
createParse,
710
require('./parser')
811
]

src/expression/function/parse.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
'use strict'
22

3-
function factory (type, config, load, typed) {
4-
const parse = load(require('../parse'))
3+
import { factory } from '../../utils/factory'
54

5+
const name = 'parse'
6+
const dependencies = ['typed', 'expression.parse']
7+
8+
export const createParse = factory(name, dependencies, ({ typed, expression: { parse } }) => {
69
/**
710
* Parse an expression. Returns a node tree, which can be evaluated by
811
* invoking node.eval().
@@ -46,7 +49,4 @@ function factory (type, config, load, typed) {
4649
'string | Array | Matrix': parse,
4750
'string | Array | Matrix, Object': parse
4851
})
49-
}
50-
51-
exports.name = 'parse'
52-
exports.factory = factory
52+
})

src/expression/index.js

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
11
'use strict'
2-
module.exports = [
2+
3+
import functions from './function'
4+
import node from './node'
5+
import { createParseExpression } from './parse'
6+
7+
export default [
38
// Note that the docs folder is called "embeddedDocs" and not "docs" to prevent issues
49
// with yarn autoclean. See https://github.com/josdejong/mathjs/issues/969
510
require('./embeddedDocs'),
6-
require('./function'),
7-
require('./node'),
11+
functions,
12+
node,
813
require('./transform'),
914

1015
require('./Help'),
11-
require('./parse'),
16+
createParseExpression,
1217
require('./Parser')
1318
]

src/expression/keywords.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
'use strict'
22

33
// Reserved keywords not allowed to use in the parser
4-
module.exports = {
4+
export const keywords = {
55
end: true
66
}

src/expression/node/AccessorNode.js

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,18 @@ import {
1111
isParenthesisNode,
1212
isSymbolNode
1313
} from '../../utils/is'
14+
import { getSafeProperty } from '../../utils/customs'
15+
import { factory } from '../../utils/factory'
16+
import { accessFactory } from './utils/access'
1417

15-
const getSafeProperty = require('../../utils/customs').getSafeProperty
18+
const name = 'expression.node.AccessorNode'
19+
const dependencies = [
20+
'subset',
21+
'expression.node.Node'
22+
]
1623

17-
function factory (type, config, load, typed) {
18-
const Node = load(require('./Node'))
19-
const access = load(require('./utils/access'))
24+
export const createAccessorNode = factory(name, dependencies, ({ subset, expression: { node: { Node } } }) => {
25+
const access = accessFactory({ subset })
2026

2127
/**
2228
* @constructor AccessorNode
@@ -208,8 +214,4 @@ function factory (type, config, load, typed) {
208214
}
209215

210216
return AccessorNode
211-
}
212-
213-
exports.name = 'AccessorNode'
214-
exports.path = 'expression.node'
215-
exports.factory = factory
217+
})

src/expression/node/ArrayNode.js

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
'use strict'
22

33
import { isNode } from '../../utils/is'
4+
import { map } from '../../utils/array'
5+
import { factory } from '../../utils/factory'
46

5-
const map = require('../../utils/array').map
6-
7-
function factory (type, config, load, typed) {
8-
const Node = load(require('./Node'))
7+
const name = 'expression.node.ArrayNode'
8+
const dependencies = [
9+
'expression.node.Node'
10+
]
911

12+
export const createArrayNode = factory(name, dependencies, ({ expression: { node: { Node } } }) => {
1013
/**
1114
* @constructor ArrayNode
1215
* @extends {Node}
@@ -179,8 +182,4 @@ function factory (type, config, load, typed) {
179182
}
180183

181184
return ArrayNode
182-
}
183-
184-
exports.name = 'ArrayNode'
185-
exports.path = 'expression.node'
186-
exports.factory = factory
185+
})

src/expression/node/AssignmentNode.js

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,22 @@
11
'use strict'
22

33
import { isAccessorNode, isIndexNode, isNode, isSymbolNode } from '../../utils/is'
4-
5-
const getSafeProperty = require('../../utils/customs').getSafeProperty
6-
const setSafeProperty = require('../../utils/customs').setSafeProperty
7-
8-
function factory (type, config, load, typed) {
9-
const Node = load(require('./Node'))
10-
const assign = load(require('./utils/assign'))
11-
const access = load(require('./utils/access'))
12-
13-
const operators = require('../operators')
4+
import { getSafeProperty, setSafeProperty } from '../../utils/customs'
5+
import { factory } from '../../utils/factory'
6+
import { accessFactory } from './utils/access'
7+
import { assignFactory } from './utils/assign'
8+
import { getPrecedence } from '../operators'
9+
10+
const name = 'expression.node.AssignmentNode'
11+
const dependencies = [
12+
'subset',
13+
'matrix',
14+
'expression.node.Node'
15+
]
16+
17+
export const createAssignmentNode = factory(name, dependencies, ({ subset, matrix, expression: { node: { Node } } }) => {
18+
const access = accessFactory({ subset })
19+
const assign = assignFactory({ subset, matrix })
1420

1521
/**
1622
* @constructor AssignmentNode
@@ -215,8 +221,8 @@ function factory (type, config, load, typed) {
215221
parenthesis = 'keep'
216222
}
217223

218-
const precedence = operators.getPrecedence(node, parenthesis)
219-
const exprPrecedence = operators.getPrecedence(node.value, parenthesis)
224+
const precedence = getPrecedence(node, parenthesis)
225+
const exprPrecedence = getPrecedence(node.value, parenthesis)
220226
return (parenthesis === 'all') ||
221227
((exprPrecedence !== null) && (exprPrecedence <= precedence))
222228
}
@@ -294,8 +300,4 @@ function factory (type, config, load, typed) {
294300
}
295301

296302
return AssignmentNode
297-
}
298-
299-
exports.name = 'AssignmentNode'
300-
exports.path = 'expression.node'
301-
exports.factory = factory
303+
})

src/expression/node/BlockNode.js

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
'use strict'
22

33
import { isNode } from '../../utils/is'
4+
import { forEach, map } from '../../utils/array'
5+
import { factory } from '../../utils/factory'
46

5-
const forEach = require('../../utils/array').forEach
6-
const map = require('../../utils/array').map
7-
8-
function factory (type, config, load, typed) {
9-
const Node = load(require('./Node'))
10-
const ResultSet = load(require('../../type/resultset/ResultSet'))
7+
const name = 'expression.node.BlockNode'
8+
const dependencies = [
9+
'type.ResultSet',
10+
'expression.node.Node'
11+
]
1112

13+
export const createBlockNode = factory(name, dependencies, ({ type: { ResultSet }, expression: { node: { Node } } }) => {
1214
/**
1315
* @constructor BlockNode
1416
* @extends {Node}
@@ -182,8 +184,4 @@ function factory (type, config, load, typed) {
182184
}
183185

184186
return BlockNode
185-
}
186-
187-
exports.name = 'BlockNode'
188-
exports.path = 'expression.node'
189-
exports.factory = factory
187+
})

src/expression/node/ConditionalNode.js

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
'use strict'
22

33
import { isBigNumber, isComplex, isNode, isUnit } from '../../utils/is'
4+
import { factory } from '../../utils/factory'
5+
import { getPrecedence } from '../operators'
46

5-
const operators = require('../operators')
6-
7-
function factory (type, config, load, typed) {
8-
const Node = load(require('./Node'))
9-
const mathTypeOf = load(require('../../function/utils/typeOf'))
7+
const name = 'expression.node.ConditionalNode'
8+
const dependencies = [
9+
'typeOf',
10+
'expression.node.Node'
11+
]
1012

13+
export const createConditionalNode = factory(name, dependencies, ({ typeOf, expression: { node: { Node } } }) => {
1114
/**
1215
* A lazy evaluating conditional operator: 'condition ? trueExpr : falseExpr'
1316
*
@@ -101,30 +104,30 @@ function factory (type, config, load, typed) {
101104
*/
102105
ConditionalNode.prototype._toString = function (options) {
103106
const parenthesis = (options && options.parenthesis) ? options.parenthesis : 'keep'
104-
const precedence = operators.getPrecedence(this, parenthesis)
107+
const precedence = getPrecedence(this, parenthesis)
105108

106109
// Enclose Arguments in parentheses if they are an OperatorNode
107110
// or have lower or equal precedence
108111
// NOTE: enclosing all OperatorNodes in parentheses is a decision
109112
// purely based on aesthetics and readability
110113
let condition = this.condition.toString(options)
111-
const conditionPrecedence = operators.getPrecedence(this.condition, parenthesis)
114+
const conditionPrecedence = getPrecedence(this.condition, parenthesis)
112115
if ((parenthesis === 'all') ||
113116
(this.condition.type === 'OperatorNode') ||
114117
((conditionPrecedence !== null) && (conditionPrecedence <= precedence))) {
115118
condition = '(' + condition + ')'
116119
}
117120

118121
let trueExpr = this.trueExpr.toString(options)
119-
const truePrecedence = operators.getPrecedence(this.trueExpr, parenthesis)
122+
const truePrecedence = getPrecedence(this.trueExpr, parenthesis)
120123
if ((parenthesis === 'all') ||
121124
(this.trueExpr.type === 'OperatorNode') ||
122125
((truePrecedence !== null) && (truePrecedence <= precedence))) {
123126
trueExpr = '(' + trueExpr + ')'
124127
}
125128

126129
let falseExpr = this.falseExpr.toString(options)
127-
const falsePrecedence = operators.getPrecedence(this.falseExpr, parenthesis)
130+
const falsePrecedence = getPrecedence(this.falseExpr, parenthesis)
128131
if ((parenthesis === 'all') ||
129132
(this.falseExpr.type === 'OperatorNode') ||
130133
((falsePrecedence !== null) && (falsePrecedence <= precedence))) {
@@ -164,30 +167,30 @@ function factory (type, config, load, typed) {
164167
*/
165168
ConditionalNode.prototype.toHTML = function (options) {
166169
const parenthesis = (options && options.parenthesis) ? options.parenthesis : 'keep'
167-
const precedence = operators.getPrecedence(this, parenthesis)
170+
const precedence = getPrecedence(this, parenthesis)
168171

169172
// Enclose Arguments in parentheses if they are an OperatorNode
170173
// or have lower or equal precedence
171174
// NOTE: enclosing all OperatorNodes in parentheses is a decision
172175
// purely based on aesthetics and readability
173176
let condition = this.condition.toHTML(options)
174-
const conditionPrecedence = operators.getPrecedence(this.condition, parenthesis)
177+
const conditionPrecedence = getPrecedence(this.condition, parenthesis)
175178
if ((parenthesis === 'all') ||
176179
(this.condition.type === 'OperatorNode') ||
177180
((conditionPrecedence !== null) && (conditionPrecedence <= precedence))) {
178181
condition = '<span class="math-parenthesis math-round-parenthesis">(</span>' + condition + '<span class="math-parenthesis math-round-parenthesis">)</span>'
179182
}
180183

181184
let trueExpr = this.trueExpr.toHTML(options)
182-
const truePrecedence = operators.getPrecedence(this.trueExpr, parenthesis)
185+
const truePrecedence = getPrecedence(this.trueExpr, parenthesis)
183186
if ((parenthesis === 'all') ||
184187
(this.trueExpr.type === 'OperatorNode') ||
185188
((truePrecedence !== null) && (truePrecedence <= precedence))) {
186189
trueExpr = '<span class="math-parenthesis math-round-parenthesis">(</span>' + trueExpr + '<span class="math-parenthesis math-round-parenthesis">)</span>'
187190
}
188191

189192
let falseExpr = this.falseExpr.toHTML(options)
190-
const falsePrecedence = operators.getPrecedence(this.falseExpr, parenthesis)
193+
const falsePrecedence = getPrecedence(this.falseExpr, parenthesis)
191194
if ((parenthesis === 'all') ||
192195
(this.falseExpr.type === 'OperatorNode') ||
193196
((falsePrecedence !== null) && (falsePrecedence <= precedence))) {
@@ -239,12 +242,8 @@ function factory (type, config, load, typed) {
239242
return false
240243
}
241244

242-
throw new TypeError('Unsupported type of condition "' + mathTypeOf(condition) + '"')
245+
throw new TypeError('Unsupported type of condition "' + typeOf(condition) + '"')
243246
}
244247

245248
return ConditionalNode
246-
}
247-
248-
exports.name = 'ConditionalNode'
249-
exports.path = 'expression.node'
250-
exports.factory = factory
249+
})

0 commit comments

Comments
 (0)