From 215d7623b59307ff6543cef765ab3971cf1a70a3 Mon Sep 17 00:00:00 2001 From: Jaden Diefenbaugh <jaden.diefenbaugh@idiap.ch> Date: Mon, 15 Oct 2018 11:42:00 -0700 Subject: [PATCH] [js][exp] choosing a protocol now smartly maps datasets based on names, fixes #126 --- .../components/experiment/ExperimentEditor.jsx | 18 ++++++++++++++++-- .../experiment/ExperimentEditor.spec.jsx | 10 +++++----- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/conda/js/src/components/experiment/ExperimentEditor.jsx b/conda/js/src/components/experiment/ExperimentEditor.jsx index d6fc65e6..acc55144 100644 --- a/conda/js/src/components/experiment/ExperimentEditor.jsx +++ b/conda/js/src/components/experiment/ExperimentEditor.jsx @@ -200,6 +200,9 @@ const levMapStrings = (keyArr: string[], valArr: string[]): { [string]: string } const vals = [...valArr]; const map = {}; + //console.log(keys); + //console.log(vals); + while(keys.length > 0){ const scores = {}; const matches = {}; @@ -227,6 +230,7 @@ const levMapStrings = (keyArr: string[], valArr: string[]): { [string]: string } map[chosenKey] = matches[chosenKey]; keys.splice(keys.indexOf(chosenKey), 1); vals.splice(vals.indexOf(matches[chosenKey]), 1); + //console.log(map); } const orderedMap = {}; @@ -234,6 +238,7 @@ const levMapStrings = (keyArr: string[], valArr: string[]): { [string]: string } orderedMap[k] = map[k]; } + //console.log(orderedMap); return orderedMap; }; @@ -587,7 +592,6 @@ export class ExperimentEditor extends React.Component<Props, State> { onChange={e => { const str = e.target.value; - //Object.keys(this.props.data.contents.datasets).map(dsName const newDs = JSON.parse(str); //console.log(newDs); this.setContents({...this.props.data.contents, datasets: newDs}); @@ -628,7 +632,17 @@ export class ExperimentEditor extends React.Component<Props, State> { const tcDs = tcDss.pop(); let setsIdx = sets.findIndex(set => set.set === tcDs.name && dbSetIsValidForTcDataset(set, tcDs)); if(setsIdx === -1){ - setsIdx = sets.findIndex(set => dbSetIsValidForTcDataset(set, tcDs)); + const validSets = sets.filter(set => dbSetIsValidForTcDataset(set, tcDs)); + let bestScore = 10000; + let bestMatch = 'notfound'; + for(const s of validSets){ + const score = lev.get(tcDs.name, s.set); + if(score < bestScore){ + bestScore = score; + bestMatch = s; + } + } + setsIdx = sets.findIndex(set => set == bestMatch); } if(setsIdx === -1) return [dbProtStr, false]; diff --git a/conda/js/src/components/experiment/ExperimentEditor.spec.jsx b/conda/js/src/components/experiment/ExperimentEditor.spec.jsx index dd218f75..017ee392 100644 --- a/conda/js/src/components/experiment/ExperimentEditor.spec.jsx +++ b/conda/js/src/components/experiment/ExperimentEditor.spec.jsx @@ -239,18 +239,18 @@ describe('<ExperimentEditor />', () => { //console.log('doing dataset'); wrapper.find('svg #block_training_data').simulate('click'); - wrapper.find('div.datasets select').at(0).simulate('change', { target: { value: '{"testing_data":{"database":"iris/1","protocol":"Main","set":"training"},"training_data":{"database":"iris/1","protocol":"Main","set":"testing"}}'}}); + wrapper.find('div.datasets select').at(0).simulate('change', { target: { value: '{"testing_data":{"database":"iris/1","protocol":"Main","set":"testing"},"training_data":{"database":"iris/1","protocol":"Main","set":"training"}}'}}); expect(updateFunc.callCount).to.equal(1); expect(wrapper.props().data.contents).to.have.deep.property('datasets', { 'testing_data': { 'database': 'iris/1', 'protocol': 'Main', - 'set': 'training' + 'set': 'testing' }, 'training_data': { 'database': 'iris/1', 'protocol': 'Main', - 'set': 'testing' + 'set': 'training' } }); @@ -492,12 +492,12 @@ describe('<ExperimentEditor />', () => { 'testing_data': { 'database': 'iris/1', 'protocol': 'Main', - 'set': 'training' + 'set': 'testing' }, 'training_data': { 'database': 'iris/1', 'protocol': 'Main', - 'set': 'testing' + 'set': 'training' } }, 'globals': { -- GitLab