From eaa314b891dbee06184cf278fe95d8a0cceee967 Mon Sep 17 00:00:00 2001 From: "francois.grand" <francois.grand@irstea.fr> Date: Tue, 19 Jun 2018 11:43:37 +0200 Subject: [PATCH] =?UTF-8?q?=20#45=20Nub=20:=20m=C3=A9thode=20getLinkablePa?= =?UTF-8?q?rameters=20remplac=C3=A9e=20par=20getLinkableValues=20qui=20ret?= =?UTF-8?q?ourne=20=C3=A9galement=20les=20r=C3=A9sultats=20et=20r=C3=A9sul?= =?UTF-8?q?tats=20compl=C3=A9mentaires?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- spec/mock_jasmine.ts | 10 +++ .../value_ref_variable_extraresult.spec.ts | 10 ++- src/nub.ts | 64 +++++++++++++++++-- src/remous.ts | 2 + src/session_nub.ts | 13 +++- src/structure/parallel_structure.ts | 12 ++++ 6 files changed, 101 insertions(+), 10 deletions(-) diff --git a/spec/mock_jasmine.ts b/spec/mock_jasmine.ts index cfb6a397..e459c917 100644 --- a/spec/mock_jasmine.ts +++ b/spec/mock_jasmine.ts @@ -116,6 +116,16 @@ class Expect { } } + public toBeDefined(message?: string) { + if (this.actual === undefined) { + if (message !== undefined) { + console.error(message); + } else { + console.error(`${this.actual} should be defined`); + } + } + } + public toBeUndefined(message?: string) { if (this.actual !== undefined) { if (message !== undefined) { diff --git a/spec/value_ref/value_ref_variable_extraresult.spec.ts b/spec/value_ref/value_ref_variable_extraresult.spec.ts index a5c7f5ee..52449b53 100644 --- a/spec/value_ref/value_ref_variable_extraresult.spec.ts +++ b/spec/value_ref/value_ref_variable_extraresult.spec.ts @@ -46,8 +46,16 @@ describe("référence d'un paramètre à un résultat complémentaire multivalu 0.9962500000000004, 0.9970000000000003, 0.9977500000000002, 0.9985000000000002, 0.9992500000000001, 1]; + const vs = rem.getLinkableValues("flu"); + expect(Object.keys(vs).length).toEqual(1); + + const vs2 = vs[0]["value"]; + expect(vs2.name).toEqual("flu"); + let i = 0; - for (const v of res.getExtraResultValuesIterator("flu")) + for (const v of vs2.valuesIterator) { + expect(f[i]).toBeDefined(); expect(Math.abs(v - f[i++]) < 0.01).toBeTruthy(); + } }); }); diff --git a/src/nub.ts b/src/nub.ts index 6524312f..83e54f4b 100644 --- a/src/nub.ts +++ b/src/nub.ts @@ -229,27 +229,77 @@ export abstract class Nub extends ComputeNode implements IReferencedNub { * @returns liste des paramètres liables à un paramètre * @param p paramètre qui sert de clé de recherche des paramètres liables */ - public getLinkableParameters(param: ParamDefinition): any[] { + // public getLinkableParameters(param: ParamDefinition): any[] { + // const res: any[] = []; + + // for (const p of this._prms) + // if (p.uid !== param.uid) + // switch (p.valueMode) { + // case ParamValueMode.SINGLE: + // case ParamValueMode.MINMAX: + // case ParamValueMode.LISTE: + // switch (param.symbol) { + // case "Z1": + // case "Z2": + // if (p.symbol === "Z1" || p.symbol === "Z2") + // res.push({ "param": p, "nub": this }); + // break; + + // default: + // if (p.symbol === param.symbol) + // res.push({ "param": p, "nub": this }); + // } + // } + + // return res; + // } + + /** + * liste des valeurs (paramètre, résultat, résultat complémentaire) liables à un paramètre + * @param src objet qui sert de clé de recherche des paramètres liables, de type INamedObject | string + * @returns tableau d'objets de la forme { "name":string, "value":NamedIterableValues, "nub":Nub}, nub=Nub d'origine de la "value" + */ + public getLinkableValues(src: any): any[] { const res: any[] = []; - for (const p of this._prms) - if (p.uid !== param.uid) + const isStr = typeof (src) === "string"; + const name = isStr ? src : src.name; + const hasUid = isStr ? false : "uid" in src; + + // paramètres + + for (const p of this._prms) { + const cond = hasUid ? p.uid !== src.uid : true; // pour éviter d'ajouter le paramètre d'entrée dans le tableau résultat + if (cond) switch (p.valueMode) { case ParamValueMode.SINGLE: case ParamValueMode.MINMAX: case ParamValueMode.LISTE: - switch (param.symbol) { + switch (name) { case "Z1": case "Z2": if (p.symbol === "Z1" || p.symbol === "Z2") - res.push({ "param": p, "nub": this }); + res.push({ "name": p.symbol, "value": p, "nub": this }); break; default: - if (p.symbol === param.symbol) - res.push({ "param": p, "nub": this }); + if (p.symbol === name) + res.push({ "name": name, "value": p, "nub": this }); } } + } + + // résultat + if (this._result !== undefined) { + if (this._result.name === name) + res.push({ "name": `${name}.`, "value": this._result, "nub": this }); + + // résultats complémentaires + + const erIter = this._result.getIterableExtraResults(name) + if (erIter !== undefined) + res.push({ "name": `${this._result.name}.${name}`, "value": erIter, "nub": this }); + } return res; } diff --git a/src/remous.ts b/src/remous.ts index 1b0075fa..519eef15 100644 --- a/src/remous.ts +++ b/src/remous.ts @@ -473,6 +473,8 @@ export class CourbeRemous extends Nub { } } + this._result = res; + return res; } diff --git a/src/session_nub.ts b/src/session_nub.ts index 49176561..a18dad28 100644 --- a/src/session_nub.ts +++ b/src/session_nub.ts @@ -193,7 +193,16 @@ export class SessionNub { * @returns liste des paramètres liables à un paramètre * @param p paramètre qui sert de clé de recherche des paramètres liables */ - public getLinkableParameters(p: ParamDefinition): any[] { - return this._nub.getLinkableParameters(p); + // public getLinkableParameters(p: ParamDefinition): any[] { + // return this._nub.getLinkableParameters(p); + // } + + /** + * liste des valeurs(paramètre, résultat, résultat complémentaire) liables à un paramètre + * @param src objet qui sert de clé de recherche des paramètres liables, de type INamedObject | string + * @returns tableau d'objets de la forme { "value":NamedIterableValues, "nub":Nub}, nub=Nub d'origine de la "value" + */ + public getLinkableValues(src: any): any[] { + return this._nub.getLinkableValues(src); } } diff --git a/src/structure/parallel_structure.ts b/src/structure/parallel_structure.ts index 7a712fc5..7a2d0a9b 100644 --- a/src/structure/parallel_structure.ts +++ b/src/structure/parallel_structure.ts @@ -293,4 +293,16 @@ export class ParallelStructure extends Nub { public getReferencedExtraResult(desc: string): any { return this._result.getExtraResult(desc); } + + /** + * liste des valeurs (paramètre, résultat, résultat complémentaire) liables à un paramètre + * @param src objet qui sert de clé de recherche des paramètres liables, de type INamedObject | string + * @returns tableau d'objets de la forme { "name":string, "value":NamedIterableValues, "nub":Nub}, nub=Nub d'origine de la "value" + */ + public getLinkableValues(src: any): any[] { + let res = super.getLinkableValues(src); + for (const s of this.structures) + res = res.concat(s.getLinkableValues(src)); + return res; + } } -- GitLab