MCPcopy
hub / github.com/josdejong/mathjs / getSplits

Function getSplits

src/function/algebra/simplify.js:721–745  ·  view source on GitHub ↗

* Get (binary) combinations of a flattened binary node * e.g. +(node1, node2, node3) -> [ * +(node1, +(node2, node3)), * +(node2, +(node1, node3)), * +(node3, +(node1, node2))] *

(node, context)

Source from the content-addressed store, hash-verified

719 *
720 */
721 function getSplits (node, context) {
722 const res = []
723 let right, rightArgs
724 const makeNode = createMakeNodeFunction(node)
725 if (isCommutative(node, context)) {
726 for (let i = 0; i < node.args.length; i++) {
727 rightArgs = node.args.slice(0)
728 rightArgs.splice(i, 1)
729 right = (rightArgs.length === 1) ? rightArgs[0] : makeNode(rightArgs)
730 res.push(makeNode([node.args[i], right]))
731 }
732 } else {
733 // Keep order, but try all parenthesizations
734 for (let i = 1; i < node.args.length; i++) {
735 let left = node.args[0]
736 if (i > 1) {
737 left = makeNode(node.args.slice(0, i))
738 }
739 rightArgs = node.args.slice(i)
740 right = (rightArgs.length === 1) ? rightArgs[0] : makeNode(rightArgs)
741 res.push(makeNode([left, right]))
742 }
743 }
744 return res
745 }
746
747 /**
748 * Returns the set union of two match-placeholders or null if there is a conflict.

Callers 1

_ruleMatchFunction · 0.85

Calls 2

createMakeNodeFunctionFunction · 0.85
isCommutativeFunction · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…