diff options
| author | Jules Laplace <julescarbon@gmail.com> | 2018-06-04 19:33:21 +0200 |
|---|---|---|
| committer | Jules Laplace <julescarbon@gmail.com> | 2018-06-04 19:33:21 +0200 |
| commit | 521b024439b202be03447188925869100904b807 (patch) | |
| tree | f64a5d37fc520c8b2ec563703877288142032916 /app/client | |
| parent | 7bb603e202710afe9f7cc4bea16a72014bc7404c (diff) | |
refactor state
Diffstat (limited to 'app/client')
| -rw-r--r-- | app/client/common/fileList.component.js | 1 | ||||
| -rw-r--r-- | app/client/modules/samplernn/index.js | 2 | ||||
| -rw-r--r-- | app/client/modules/samplernn/samplernn.actions.js | 33 | ||||
| -rw-r--r-- | app/client/modules/samplernn/samplernn.datasets.js | 11 | ||||
| -rw-r--r-- | app/client/modules/samplernn/samplernn.inspect.js | 94 |
5 files changed, 30 insertions, 111 deletions
diff --git a/app/client/common/fileList.component.js b/app/client/common/fileList.component.js index d060e01..0e6c402 100644 --- a/app/client/common/fileList.component.js +++ b/app/client/common/fileList.component.js @@ -19,6 +19,7 @@ export const FileList = props => { } = props const { mapFn, sortFn } = util.sort.orderByFn(orderBy) const fileList = (files || []) + // .filter(f => !!f) .map(mapFn) .sort(sortFn) .map(pair => { diff --git a/app/client/modules/samplernn/index.js b/app/client/modules/samplernn/index.js index 9efb6de..6459056 100644 --- a/app/client/modules/samplernn/index.js +++ b/app/client/modules/samplernn/index.js @@ -5,7 +5,6 @@ import SampleRNNShow from './samplernn.show' import SampleRNNDatasets from './samplernn.datasets' import SampleRNNImport from './samplernn.import' import SampleRNNResults from './samplernn.results' -import SampleRNNInspect from './samplernn.inspect' import SampleRNNLoss from './samplernn.loss' function router () { @@ -13,7 +12,6 @@ function router () { <section> <Route exact path='/samplernn/new/' component={SampleRNNNew} /> <Route exact path='/samplernn/graph/' component={SampleRNNLoss} /> - <Route exact path='/samplernn/inspect/' component={SampleRNNInspect} /> <Route exact path='/samplernn/import/' component={SampleRNNImport} /> <Route exact path='/samplernn/datasets/' component={SampleRNNShow} /> <Route exact path='/samplernn/datasets/:id/' component={SampleRNNShow} /> diff --git a/app/client/modules/samplernn/samplernn.actions.js b/app/client/modules/samplernn/samplernn.actions.js index fe73bf2..828850e 100644 --- a/app/client/modules/samplernn/samplernn.actions.js +++ b/app/client/modules/samplernn/samplernn.actions.js @@ -1,3 +1,5 @@ +import uuidv1 from 'uuid/v1' + import socket from '../../socket' import types from '../../types' @@ -28,7 +30,10 @@ export const load_directories = (id) => (dispatch) => { datasets: [], } - const datasetLookup = {} + let datasetLookup = {} + let folderLookup = {} + let fileLookup = {} + let taskLookup = {} const get_dataset = (name, folder=unsortedFolder, date) => { const dataset = datasetLookup[name] || empty_dataset(name, folder) @@ -45,13 +50,13 @@ export const load_directories = (id) => (dispatch) => { checkpoints: [], output: [], } - datasetLookup[dataset.name] = dataset - folder.datasets.push(dataset) + datasetLookup[name] = dataset + folder.datasets.push(name) return dataset } // take all of the folders and put them in a lookup - const folderLookup = folders.reduce((folderLookup, folder) => { + folderLookup = folders.reduce((folderLookup, folder) => { folderLookup[folder.id] = { id: folder.id, name: folder.name, @@ -70,6 +75,7 @@ export const load_directories = (id) => (dispatch) => { // build the initial dataset lookup table using the ungenerated files ungeneratedFiles.reduce((datasetLookup, file) => { + fileLookup[file.id] = file if (! file.name) { file.name = (file.opt || {}).token || file.url } @@ -77,18 +83,19 @@ export const load_directories = (id) => (dispatch) => { const folder = folderLookup[file.folder_id] || unsortedFolder const dataset = get_dataset(name, folder, file.date || file.created_at) if (file.url.match(file.name)) file.persisted = true - dataset.input.push(file) - folder.files.push(file) + dataset.input.push(file.id) + folder.files.push(file.id) return datasetLookup }, datasetLookup) // go over the generated files and add addl datasets (if the files were deleted) generatedFiles.map(file => { + fileLookup[file.id] = file const pair = file.name.split('.')[0].split('-') const folder = folderLookup[file.folder_id] || unsortedFolder const dataset = get_dataset(pair[0], folder, file.date || file.created_at) - dataset.output.push(file) - folder.files.push(file) + dataset.output.push(file.id) + folder.files.push(file.id) file.epoch = file.epoch || pair[1] }) @@ -101,10 +108,12 @@ export const load_directories = (id) => (dispatch) => { }) flatDatasets.forEach(file => { + file.uuid = uuidv1() + fileLookup[file.uuid] = file const name = file.name.split('.')[0] const dataset = get_dataset(name, unsortedFolder, file.date) file.persisted = false - dataset.input.push(file) + dataset.input.push(file.uuid) }) // exp:coccokit_3-frame_sizes:8,2-n_rnn:2-dataset:coccokit_3 @@ -129,6 +138,8 @@ export const load_directories = (id) => (dispatch) => { }) output.map(file => { + file.uuid = uuidv1() + fileLookup[file.uuid] = file const pair = file.name.split('.')[0].split('-') const dataset = get_dataset(pair[0], unsortedFolder, file.date) file.persisted = false @@ -144,7 +155,7 @@ export const load_directories = (id) => (dispatch) => { return false }) if (! found) { - dataset.output.push(file) + dataset.output.push(file.uuid) } }) @@ -152,7 +163,9 @@ export const load_directories = (id) => (dispatch) => { type: types.samplernn.init, data: { folderLookup, + fileLookup, datasetLookup, + taskLookup, folders, files, checkpoints, output, diff --git a/app/client/modules/samplernn/samplernn.datasets.js b/app/client/modules/samplernn/samplernn.datasets.js index b4f0c12..ceb8f46 100644 --- a/app/client/modules/samplernn/samplernn.datasets.js +++ b/app/client/modules/samplernn/samplernn.datasets.js @@ -84,20 +84,21 @@ class SampleRNNDatasets extends Component { } renderGroups(){ const { samplernn, runner, onPickDataset, onPickFile, datasetActions } = this.props - const folder = samplernn.folder + const { datasetLookup, fileLookup } = samplernn.data + const { folder } = samplernn const { mapFn, sortFn } = util.sort.orderByFn('date desc') const moduleOnGPU = runner.gpu.task.module === samplernnModule.name - const datasets = folder.datasets.map(mapFn).sort(sortFn).map(pair => { + const datasets = folder.datasets.map(name => datasetLookup[name]).map(mapFn).sort(sortFn).map(pair => { const dataset = pair[1] const isProcessing = moduleOnGPU && runner.gpu.task.dataset === dataset const status = isProcessing ? util.gerund(runner.gpu.task.activity) : '' return ( - <div className='row dataset' onClick={() => onPickDataset && onPickDataset(dataset)}> + <div key={dataset.name} className='row dataset' onClick={() => onPickDataset && onPickDataset(dataset)}> {this.props.beforeRow && this.props.beforeRow(dataset)} <div className='col'> {!!dataset.input.length && <FileList - files={dataset.input} + files={dataset.input.map(id => fileLookup[id])} className='input_files' fileListClassName='' rowClassName='input_file' @@ -122,7 +123,7 @@ class SampleRNNDatasets extends Component { <div className='col'> {!!dataset.output.length && <FileList - files={dataset.output} + files={dataset.output.map(id => fileLookup[id])} orderBy='epoch desc' fields={'name date epoch size'} onPickFile={onPickFile} diff --git a/app/client/modules/samplernn/samplernn.inspect.js b/app/client/modules/samplernn/samplernn.inspect.js deleted file mode 100644 index b5315d7..0000000 --- a/app/client/modules/samplernn/samplernn.inspect.js +++ /dev/null @@ -1,94 +0,0 @@ -import { h, Component } from 'preact' -import { bindActionCreators } from 'redux' -import { connect } from 'react-redux' - -import * as samplernnActions from './samplernn.actions' -import { FileList } from '../../common/fileList.component' -import TextInput from '../../common/textInput.component' - -class SampleRNNInspect extends Component { - constructor(props){ - super() - this.fileOptions = this.fileOptions.bind(this) - this.pickFile = this.pickFile.bind(this) - props.actions.load_directories() - } - pickFile(file){ - console.log('pick', file) - } - fileOptions(file){ - // console.log(file) - if (file.activity === 'url' && !file.dataset) { - if (this.props.runner.cpu.status !== 'IDLE') { - return ( - <div className='gray'> - fetching... - </div> - ) - } else { - return ( - <div className='link' onClick={() => this.fetchURL(file.url)}> - fetch - </div> - ) - } - } - return ( - <div> - <div className='link' onClick={() => this.train(file)}>train</div> - {file.epoch == 0 && <div className='epochs'>{file.epochs} ep.</div>} - </div> - ) - } - fetchURL(url) { - } - render(){ - const { samplernn } = this.props - // console.log(samplernn.upload) - // sort files?? - return ( - <div className='app'> - <div className='heading'> - <h3>SampleRNN (inspect)</h3> - </div> - {this.renderData()} - </div> - ) - } - renderData(){ - const { samplernn, actions } = this.props - console.log(samplernn) - if (! samplernn.data) return - return ( - <div class='row params'> - <FileList - title='Folders' - className='folders' - fields={new Set(['name'])} - onPick={actions.set_folder} - files={samplernn.data.folders} - /> - <FileList - title='Files' - files={samplernn.data.files} - /> - <FileList - title='Checkpoints' - files={samplernn.data.checkpoints} - /> - </div> - ) - } -} - -const mapStateToProps = state => ({ - samplernn: state.module.samplernn, - runner: state.system.runner, - task: state.task, -}) - -const mapDispatchToProps = (dispatch, ownProps) => ({ - actions: bindActionCreators(samplernnActions, dispatch), -}) - -export default connect(mapStateToProps, mapDispatchToProps)(SampleRNNInspect) |
