mathsteps-experimental-fork
Version:
Step by step math solutions. Experimental Fork
63 lines (60 loc) • 2.01 kB
JavaScript
import '../config.js';
import '../cache.js';
import { kemuFlatten } from '../simplifyExpression/kemuSimplifyCommonServices.js';
function setUpNewNodeTree(context, newNode, newTopNode = null) {
if (!newTopNode)
newTopNode = newNode;
if (context.parent) {
context.parent.args[context.index] = newNode;
} else if (newNode.type === context.topNode.type) {
Object.keys(context.topNode).forEach((key) => delete context.topNode[key]);
Object.assign(context.topNode, newTopNode);
} else {
context.topNode = newNode;
}
}
function travelTreeExpanded(node, fn, context = {}) {
if (!context.visited) {
context.visited = /* @__PURE__ */ new Set();
node = kemuFlatten(node);
context.topNode = node;
context.depth = 0;
}
const stack = [{ node, parent: null, parentParent: null, parentIndex: null, index: null, depth: 0 }];
while (stack.length > 0) {
const current = stack.pop();
if (!current)
continue;
const { node: node2, parent, parentParent, parentIndex, index, depth } = current;
if (context.visited.has(node2))
continue;
context.visited.add(node2);
fn(node2, { ...context, parent, parentParent, parentIndex, index, depth });
if (parent && parent.args)
parent.args[index] = node2;
if (parentParent && parentParent.args)
parentParent.args[parentIndex] = parent;
if (node2.args) {
const currentParentIndex = index !== null ? index : 0;
for (let i = node2.args.length - 1; i >= 0; i--) {
stack.push({
node: node2.args[i],
parent: node2,
parentParent: parent,
parentIndex: currentParentIndex,
index: i,
depth: depth + 1
});
}
}
}
}
function removeImplicitMultiplicationFromNode(node) {
node.traverse((node2) => {
const node_ = node2;
if (node_.implicit)
node_.implicit = false;
});
return node;
}
export { removeImplicitMultiplicationFromNode, setUpNewNodeTree, travelTreeExpanded };