mirror of
https://github.com/josdejong/mathjs.git
synced 2026-01-18 14:59:29 +00:00
Clean debug code
Clean all debug code
This commit is contained in:
parent
d0a13eaaa9
commit
4ca4e6fa3a
@ -1,51 +1,9 @@
|
||||
'use strict';
|
||||
|
||||
////////////////// Debug Code ///////////////////////////
|
||||
|
||||
// Source: https://stackoverflow.com/questions/14172455/get-name-and-line-of-calling-function-in-node-js
|
||||
|
||||
//Object.defineProperty(global, '__stack', {
|
||||
//get: function() {
|
||||
// var orig = Error.prepareStackTrace;
|
||||
// Error.prepareStackTrace = function(_, stack) {
|
||||
// return stack;
|
||||
// };
|
||||
// var err = new Error;
|
||||
// Error.captureStackTrace(err, arguments.callee);
|
||||
// var stack = err.stack;
|
||||
// Error.prepareStackTrace = orig;
|
||||
// return stack;
|
||||
// }
|
||||
//});
|
||||
//
|
||||
//Object.defineProperty(global, '__line', {
|
||||
//get: function() {
|
||||
// return __stack[2].getLineNumber();
|
||||
// }
|
||||
//});
|
||||
//
|
||||
//Object.defineProperty(global, '__function', {
|
||||
//get: function() {
|
||||
// return __stack[2].getFunctionName();
|
||||
// }
|
||||
//});
|
||||
//
|
||||
////////////////// Debug Code ///////////////////////////
|
||||
//
|
||||
//function retStr(expr) { //XXX
|
||||
// return expr.toString({parenthesis: 'all'}).replace(/ /g,''); // st + "> " +
|
||||
//}
|
||||
//
|
||||
|
||||
//var count=0 //XXX counter of calls that changes an expression
|
||||
//var prev=""; //XXX previous expression before calls parse or simplify
|
||||
//var glob=""; //XXX global string for print in the error
|
||||
|
||||
function factory (type, config, load, typed) {
|
||||
var simplify = load(require('./simplify'));
|
||||
var simplifyCore = load(require('./simplify/simplifyCore')); //NNN
|
||||
var simplifyConstant = load(require('./simplify/simplifyConstant')); //NNN
|
||||
|
||||
var simplifyCore = load(require('./simplify/simplifyCore'));
|
||||
var simplifyConstant = load(require('./simplify/simplifyConstant'));
|
||||
var ArgumentsError = require('../../error/ArgumentsError');
|
||||
var parse = load(require('../../expression/function/parse'));
|
||||
var number = require('../../utils/number')
|
||||
@ -100,20 +58,20 @@ function factory (type, config, load, typed) {
|
||||
*/
|
||||
var rationalize = typed('rationalize', {
|
||||
'string': function (expr) {
|
||||
return rationalize(parse(expr), {}, false); //XXX
|
||||
return rationalize(parse(expr), {}, false);
|
||||
},
|
||||
|
||||
'string, boolean': function (expr, detailed) {
|
||||
return rationalize(parse(expr), {} , detailed); //XXX
|
||||
return rationalize(parse(expr), {} , detailed);
|
||||
},
|
||||
|
||||
|
||||
'string, Object': function (expr, scope) {
|
||||
return rationalize(parse(expr), scope, false); //XXX
|
||||
return rationalize(parse(expr), scope, false);
|
||||
},
|
||||
|
||||
'string, Object, boolean': function (expr, scope, detailed) {
|
||||
return rationalize(parse(expr), scope, detailed); //XXX
|
||||
return rationalize(parse(expr), scope, detailed);
|
||||
},
|
||||
|
||||
'Node': function (expr) {
|
||||
@ -143,7 +101,7 @@ function factory (type, config, load, typed) {
|
||||
var rules;
|
||||
var eDistrDiv = true
|
||||
|
||||
expr = simplify(expr, setRules.firstRules); // Apply the initial rules, including succ div rules //XXX
|
||||
expr = simplify(expr, setRules.firstRules); // Apply the initial rules, including succ div rules
|
||||
s = expr.toString();
|
||||
|
||||
|
||||
@ -160,9 +118,9 @@ function factory (type, config, load, typed) {
|
||||
}
|
||||
|
||||
if (redoInic) { // Apply first rules again without succ div rules (if there are changes)
|
||||
expr = simplify(expr,setRules.firstRulesAgain); //XXX
|
||||
expr = simplify(expr,setRules.firstRulesAgain);
|
||||
}
|
||||
expr = simplify(expr,setRules.finalRules); // Aplly final rules //XXX
|
||||
expr = simplify(expr,setRules.finalRules); // Aplly final rules
|
||||
|
||||
} // NVars >= 1
|
||||
|
||||
@ -171,9 +129,6 @@ function factory (type, config, load, typed) {
|
||||
|
||||
if (nVars==1) {
|
||||
if (expr.type==='OperatorNode' && expr.op==='/') { // Separate numerator from denominator
|
||||
//console.log(retStr('N',expr.args[0])) //XXX
|
||||
//console.log(retStr('D',expr.args[1])) //XXX
|
||||
// glob = retStr("N",expr.args[0]);
|
||||
expr.args[0] = polyToCanonical(expr.args[0],coefficients);
|
||||
expr.args[1] = polyToCanonical(expr.args[1]);
|
||||
if (detailed) {
|
||||
@ -184,7 +139,7 @@ function factory (type, config, load, typed) {
|
||||
expr = polyToCanonical(expr,coefficients);
|
||||
if (detailed) {
|
||||
retRationalize.numerator = expr;
|
||||
retRationalize.denominator = null // new ConstantNode(1);
|
||||
retRationalize.denominator = null
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@ -192,11 +147,6 @@ function factory (type, config, load, typed) {
|
||||
retRationalize.denominator = null;
|
||||
} // nVars
|
||||
|
||||
// console.log(glob); //XXX
|
||||
// count = 0;
|
||||
// prev = ""
|
||||
// glob = "";
|
||||
|
||||
if (! detailed) return expr;
|
||||
retRationalize.coefficients = coefficients;
|
||||
retRationalize.variables = polyRet.variables;
|
||||
@ -205,259 +155,6 @@ function factory (type, config, load, typed) {
|
||||
} // ^^^^^^^ end of rationalize ^^^^^^^^
|
||||
}); // end of typed rationalize
|
||||
|
||||
//////////////////// Debug Code ///////////////////////////
|
||||
//
|
||||
// //--------------------- procMidTok ------------------------------
|
||||
// // break s in position p (next char).
|
||||
// // return new position backwards without
|
||||
// // break a number or identifier.
|
||||
// //--------------------------------------------------------------
|
||||
// function procMidTok(s, pos) {
|
||||
// if (pos>=s.length) return pos;
|
||||
//
|
||||
// var ch; // current character
|
||||
// var pBack;
|
||||
// var digs = "0123456789";
|
||||
// var lets = "abcdefghilklmnoprstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_$";
|
||||
//
|
||||
// var isDig; // Status of current character
|
||||
// var isLet;
|
||||
// var isExpo;
|
||||
// var isSign;
|
||||
// var isDot;
|
||||
//
|
||||
// var pBack = pos; // backward cursor
|
||||
// var inic = true;
|
||||
// var canNumber = true;
|
||||
// var canId = true;
|
||||
//
|
||||
// var pastExpo = false; // Already occurs "e" or "E"
|
||||
// var pastDot = false; // Already occurs "."
|
||||
// var pastSign = false; // Already occurs "-" or "+"
|
||||
//
|
||||
// var succExpo = false; // Previous character backwards is +,-,digit
|
||||
// var succSign = false;
|
||||
// var succDot = true;
|
||||
//
|
||||
// var prevExpo = false;
|
||||
// var prevSign = false;
|
||||
// var prevNumber= false;
|
||||
// var prevDot= false;
|
||||
//
|
||||
// var triggerSign=false;
|
||||
//
|
||||
// if (pos+1<s.length) {
|
||||
// // expo just before digit / signal
|
||||
// var ch=s[pos+1];
|
||||
// succExpo = digs.indexOf(ch)!==-1 || ch==="+" || ch==="-";
|
||||
//
|
||||
// // sign just before digit / dot
|
||||
// succSign = digs.indexOf(ch)!==-1 || ch==="." ;
|
||||
//
|
||||
// // dot never just before letter, signal or dot
|
||||
// succDot = lets.indexOf(ch)===-1 && ch!=="+" && ch!=="-" && ch!=="."
|
||||
// }
|
||||
//
|
||||
// var pSave = pos; // if does not occurs digit or point, uses the initial position
|
||||
//
|
||||
// while (pBack>=0) { // loop
|
||||
//
|
||||
// ch = s[pBack]; // current character
|
||||
// isDig = digs.indexOf(ch)!==-1; // is digit
|
||||
// isLet = lets.indexOf(ch)!==-1; // is letter
|
||||
// isDot = ch==="." && canNumber ; // is dot
|
||||
// isExpo = ( ch==="e" || ch==="E") && canNumber ; // is expo
|
||||
// isSign = ( ch==="+" || ch==="-" ) && canNumber ; // is sign
|
||||
//
|
||||
// if (prevSign) { // if previous is signal
|
||||
// triggerSign = ! isExpo; // wait for "e" or it's the end. Get piece after sign
|
||||
// canNumber = isExpo;
|
||||
// } else if (prevExpo && ! isDig && ! isDot ) { // before "e" needs a digit or dot
|
||||
// prevExpo = false;
|
||||
// pastExpo = false
|
||||
// triggerSign = pastSign // Is not a number, get token after sign te23
|
||||
// canNumber = ! triggerSign
|
||||
// // There is a situation that don't trigger, but it is catched below.
|
||||
// // Ex: d23232323e+23, the piece is 23.
|
||||
// }
|
||||
//
|
||||
// // number: digit, signal, dot (just once), expo (just once)
|
||||
// if (canNumber) canNumber = isDig || isDot || isExpo || isSign;
|
||||
//
|
||||
// // id: letter, digit
|
||||
// if (canId) canId = isLet || isDig
|
||||
//
|
||||
// // expo just before "+","-",digit. Never two "e" in number. Nuver before "."
|
||||
// if (isExpo && canNumber)
|
||||
// canNumber = succExpo && ! pastDot && ! pastExpo;
|
||||
//
|
||||
// // Signal just before digit/dot and ends before "e" or "."
|
||||
// if (isSign && canNumber)
|
||||
// canNumber = succSign && ! pastExpo && ! pastDot;
|
||||
//
|
||||
// // Dot not after letter,dot or signal. Never 2 dots.
|
||||
// if (isDot && canNumber) {
|
||||
// canNumber = succDot && ! pastDot;
|
||||
// }
|
||||
//
|
||||
// // Invalid character in an identifier or decimal number
|
||||
// if (! canNumber && ! canId ) {
|
||||
// if (triggerSign || (pastSign && ! canNumber)) // Sign not immediately after "NUMBER e" (exponential notation)
|
||||
// pBack = pSave;
|
||||
// else
|
||||
// pBack = Math.min(pBack+1,pos); // index of first character from id or number without the sign
|
||||
// return pBack
|
||||
// }
|
||||
//
|
||||
// pastSign = isSign || pastSign
|
||||
// pastExpo = isExpo || pastExpo;
|
||||
// pastDot = isDot || pastDot;
|
||||
//
|
||||
// succExpo = isDig || isSign;
|
||||
// succSign = isDig || isDot;
|
||||
// succDot = ! isLet && ! isSign && ! isDot
|
||||
//
|
||||
// prevNumber = canNumber;
|
||||
//
|
||||
// prevExpo = isExpo; // Previous character is expo?
|
||||
// prevDot = isDot;
|
||||
// prevSign = isSign;
|
||||
//
|
||||
// if (isDig || isDot) pSave = pBack; // Save last digit or dot position
|
||||
// pBack --
|
||||
// } // while
|
||||
//
|
||||
// return 0;
|
||||
// }
|
||||
//
|
||||
//
|
||||
// //--------------------- breakStr ------------------------------
|
||||
// // break string "s" in pieces of length "len"
|
||||
// // if type empty no handling
|
||||
// // if type="#" includes "// " in each line (javascript comment)
|
||||
// // if type = '"' is character that needs occurs even times
|
||||
// // break line in the middle of a quoted string
|
||||
// //--------------------------------------------------------------
|
||||
// function breakStr(s, len, type="") {
|
||||
// var isComm = (type==="#"); // Is comment?
|
||||
// var piece; // piece of string
|
||||
// var n = s.length; // total length
|
||||
// var x = ""; // exit
|
||||
// var pNew; // changed index
|
||||
// var ok;
|
||||
// if (type!=="")
|
||||
// var patt = new RegExp(type,"g");
|
||||
//
|
||||
// if (n < len) return (isComm ? "// ":"") + s + "\n";
|
||||
// var pos = 0;
|
||||
// while (pos <= n-1) {
|
||||
// piece = (isComm ? "// ": "") + s.slice(pos,pos+len)
|
||||
//
|
||||
// pos += len;
|
||||
// pNew = pos;
|
||||
// ok = isComm;
|
||||
//
|
||||
// if (! isComm && (type!=="")) { // Has quota delimiter
|
||||
// var k = (piece.match(patt) || []).length; // count characters
|
||||
// if (k % 2 ===1) { // Odd number of quotes?
|
||||
// pNew = s.lastIndexOf(type,pos-1)-1; // Search next even quote and skip back
|
||||
// ok = true;
|
||||
// } // odd quote
|
||||
// } // search even quote
|
||||
//
|
||||
// if (! isComm && ! ok) // Can be in the middle of token (id/number)
|
||||
// var pNew = procMidTok(s,pos);
|
||||
//
|
||||
// if (pos !== pNew) {
|
||||
// piece = piece.slice(0,len-(pos-pNew));
|
||||
// pos = pNew;
|
||||
// }
|
||||
// x += piece + "\n"; // If nothing special
|
||||
// } // while
|
||||
// return x
|
||||
// }
|
||||
//
|
||||
//
|
||||
// // ----------------------- funcCommon ----------------------
|
||||
// // Common piece for "simplifyDeb" and "parseDeb" functions
|
||||
// // ----------------------------------------------------------
|
||||
// function funcCommon(func,expr,rules,lin) {
|
||||
// var actual;
|
||||
// var len = 70;
|
||||
// count += 1;
|
||||
// if (prev === "") {
|
||||
// prev = expr;
|
||||
// glob += breakStr(count + "> Initial Expression: " + expr + " before " + func.name +" call(" + lin + ")",len,"#") ;
|
||||
// glob += breakStr("var expr = " + expr + ";",len); // Expressão inicial
|
||||
// } else {
|
||||
// actual = retStr(expr);
|
||||
// if (prev === actual)
|
||||
// glob += "// " + count + "> No expression change before " + func.name +" call(" + lin + ")\n" ;
|
||||
// else
|
||||
// glob += breakStr(count + "> Expression in " + func.name +" call [" + prev + "] changes to " + actual,len,"#");
|
||||
// }
|
||||
//
|
||||
// strRules = JSON.stringify(rules);
|
||||
// if (func.name==="simplify") { // Simplify
|
||||
// var strRules;
|
||||
// if (Array.isArray(rules)) { // Simplify call with rules
|
||||
// var erro=false;
|
||||
// if (typeof(rules[0])==="function") { // Simplify call include old rules.
|
||||
// erro = (typeof(rules[3]) !=="function");
|
||||
// if (erro) glob += "// " + count + '> Error in rules. Function expected in index 3\n';
|
||||
// if (! erro) {
|
||||
// erro = (rules[0].name !== "simplifyCore");
|
||||
// if (erro) glob += "// " + count + '> Error in rules. simplifyCore function expected in index 0\n';
|
||||
// }
|
||||
// if (! erro) {
|
||||
// erro = (rules[3].name !== "simplifyConstant");
|
||||
// if (erro) glob += "// " + count + '> Error in rules. simplifyConstant function expected in index 14\n';
|
||||
// }
|
||||
// if (! erro) {
|
||||
// strRules = strRules.replace("[null,","[simplifyCore,");
|
||||
// strRules = strRules.replace(",null,",",simplifyConstant,");
|
||||
// }
|
||||
// }
|
||||
// glob += breakStr("var rules = " + strRules + ";",len,'"'); // rule assignment in generated source
|
||||
// }
|
||||
// glob += "expr = simplify(expr,rules);\n"; // simplify call in generated source
|
||||
// var node = func(expr,rules); // real execution
|
||||
// } // end of simplify part
|
||||
//
|
||||
// else { // parse part
|
||||
// glob += "expr = parse(expr);\n" // parse call in generated source
|
||||
// var node = func(expr); // real execution
|
||||
// } // end of parse part
|
||||
//
|
||||
// prev = retStr(node);
|
||||
// glob += breakStr(count + "> Expression in " + func.name +" call (" + lin + ") changes to " + prev,len,"#");
|
||||
// glob += "// ==========================\n";
|
||||
// return node;
|
||||
// }
|
||||
//
|
||||
// // ----------------------- simplifyDeb ----------------------
|
||||
// // "simplify" encapsulated for debug action
|
||||
// // ----------------------------------------------------------
|
||||
//
|
||||
// function simplifyDeb(expr,rules) { ///XXX
|
||||
// var lin = __line;
|
||||
// node = funcCommon(simplify,expr,rules,lin);
|
||||
// return node;
|
||||
// }
|
||||
//
|
||||
//
|
||||
// // ----------------------- parseDeb ----------------------
|
||||
// // "parse" encapsulated for debug action
|
||||
// // ----------------------------------------------------------
|
||||
// function parseDeb(expr) { ///XXX
|
||||
// var lin=__line;
|
||||
// node = funcCommon(parse,expr,undefined,lin);
|
||||
// return node;
|
||||
// }
|
||||
|
||||
////////////////// End of Debug Code ///////////////////////////
|
||||
|
||||
|
||||
/**
|
||||
* Function to simplify an expression using an optional scope and
|
||||
* return it if the expression is a polynomial expression, i.e.
|
||||
@ -480,7 +177,7 @@ function factory (type, config, load, typed) {
|
||||
|
||||
function polynomial (expr, scope, extended) {
|
||||
var variables = [];
|
||||
var node = simplify(expr,scope); // Resolves any variables and functions with all defined parameters //XXX
|
||||
var node = simplify(expr,scope); // Resolves any variables and functions with all defined parameters
|
||||
extended = !! extended
|
||||
|
||||
var oper = '+-*' + (extended ? '/' : '');
|
||||
@ -551,16 +248,6 @@ function factory (type, config, load, typed) {
|
||||
* @return {array} rule set to rationalize an polynomial expression
|
||||
*/
|
||||
function rulesRationalize() {
|
||||
// var sCore; // simplifyCore function
|
||||
// var sConstant; // simplifyConstant function
|
||||
|
||||
// simplify.rules.forEach(function(elem) { // simplify.rules - Standard simplify rules
|
||||
// if (elem.name) {
|
||||
// if (elem.name==="simplifyCore") sCore = elem;
|
||||
// if (elem.name==="simplifyConstant") sConstant = elem;
|
||||
// }
|
||||
// });
|
||||
|
||||
var oldRules = [simplifyCore, // sCore
|
||||
{l:"n+n",r:"2*n"},
|
||||
{l:"n+-n",r:"0"},
|
||||
@ -831,13 +518,12 @@ function factory (type, config, load, typed) {
|
||||
// -,+,* : children of +,-
|
||||
if ((node.fn==='subtract' || node.fn==='add' || node.fn==='multiply') &&
|
||||
noPai.fn!=='add' && noPai.fn!=='subtract' )
|
||||
throw new ArgumentsError('Invalid ' + node.op + ' placing'); //XXX Append : [' + glob + ']')
|
||||
throw new ArgumentsError('Invalid ' + node.op + ' placing');
|
||||
|
||||
// -,+ : first child
|
||||
// if ((node.fn==='subtract' || node.fn==='add' || //TTT
|
||||
// node.fn==='unaryMinus' ) && o.noFil!==0 )
|
||||
// throw new ArgumentsError('Invalid ' + node.op + ' placing')
|
||||
|
||||
if ((node.fn==='subtract' || node.fn==='add' ||
|
||||
node.fn==='unaryMinus' ) && o.noFil!==0 )
|
||||
throw new ArgumentsError('Invalid ' + node.op + ' placing')
|
||||
} // Has parent
|
||||
|
||||
// Firers: ^,* Old: ^,&,-(unary): firers
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user