summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorJules Laplace <julescarbon@gmail.com>2018-06-04 19:33:21 +0200
committerJules Laplace <julescarbon@gmail.com>2018-06-04 19:33:21 +0200
commit521b024439b202be03447188925869100904b807 (patch)
treef64a5d37fc520c8b2ec563703877288142032916 /app
parent7bb603e202710afe9f7cc4bea16a72014bc7404c (diff)
refactor state
Diffstat (limited to 'app')
-rw-r--r--app/client/common/fileList.component.js1
-rw-r--r--app/client/modules/samplernn/index.js2
-rw-r--r--app/client/modules/samplernn/samplernn.actions.js33
-rw-r--r--app/client/modules/samplernn/samplernn.datasets.js11
-rw-r--r--app/client/modules/samplernn/samplernn.inspect.js94
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)