From 1188bb1750d85a576a43e2108c252ae04510389f Mon Sep 17 00:00:00 2001 From: Laurent Bossavit Date: Thu, 23 Nov 2017 16:19:24 +0100 Subject: [PATCH] :bug: Ne pas propager le filtre de variable en variable --- source/engine/mecanisms.js | 4 ++-- source/engine/traverse.js | 7 +++---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/source/engine/mecanisms.js b/source/engine/mecanisms.js index 8e2ee5914..4a758ada3 100644 --- a/source/engine/mecanisms.js +++ b/source/engine/mecanisms.js @@ -402,7 +402,7 @@ let doInversion = (situationGate, parsedRules, v, dottedName) => { } let { fixedObjectiveValue, fixedObjectiveRule } = inversion let fx = x => - console.log('fx') || clearDict() && evaluateNode( + clearDict() && evaluateNode( n => dottedName === n ? x : situationGate(n), parsedRules, fixedObjectiveRule @@ -423,7 +423,7 @@ let doInversion = (situationGate, parsedRules, v, dottedName) => { ) ) } - console.log('uniroot', dottedName, inversion.fixedObjective) + let tolerancePercentage = 0.00001, // cette fonction détermine la racine d'une fonction sans faire trop d'itérations nodeValue = uniroot( diff --git a/source/engine/traverse.js b/source/engine/traverse.js index e7bdbb725..9ffe0ef16 100644 --- a/source/engine/traverse.js +++ b/source/engine/traverse.js @@ -81,7 +81,7 @@ let fillFilteredVariableNode = (rules, rule) => (filter, parseResult) => { let newSituation = name => (name == 'sys.filter' ? filter : situation(name)) return originalEval(newSituation, parsedRules, node) } - let node = fillVariableNode(rules, rule)(parseResult) + let node = fillVariableNode(rules, rule, filter)(parseResult) return { ...node, evaluate: evaluateFiltered(node.evaluate) @@ -92,14 +92,13 @@ let fillFilteredVariableNode = (rules, rule) => (filter, parseResult) => { // ne pas laisser trop longtemps cette "optimisation" qui tue l'aspect fonctionnel de l'algo var dict -export let clearDict = () => dict = console.log('clear dict') || {} +export let clearDict = () => dict = {} -let fillVariableNode = (rules, rule) => parseResult => { +let fillVariableNode = (rules, rule, filter) => parseResult => { let evaluate = (situation, parsedRules, node) => { let dottedName = node.dottedName, // On va vérifier dans le cache courant, dict, si la variable n'a pas été déjà évaluée // En effet, l'évaluation dans le cas d'une variable qui a une formule, est coûteuse ! - filter = situation('sys.filter'), cacheName = dottedName + (filter ? '.' + filter : ''), cached = dict[cacheName], // make parsedRules a dict object, that also serves as a cache of evaluation ?