Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
OpenDAS
nni
Commits
12410686
Unverified
Commit
12410686
authored
Jun 21, 2019
by
chicm-ms
Committed by
GitHub
Jun 21, 2019
Browse files
Merge pull request #20 from microsoft/master
pull code
parents
611a45fc
61fec446
Changes
235
Show whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
555 additions
and
344 deletions
+555
-344
src/sdk/pynni/nni/platform/local.py
src/sdk/pynni/nni/platform/local.py
+3
-3
src/sdk/pynni/nni/smac_tuner/convert_ss_to_scenario.py
src/sdk/pynni/nni/smac_tuner/convert_ss_to_scenario.py
+15
-15
src/sdk/pynni/nni/smac_tuner/smac_tuner.py
src/sdk/pynni/nni/smac_tuner/smac_tuner.py
+8
-8
src/sdk/pynni/nni/smartparam.py
src/sdk/pynni/nni/smartparam.py
+2
-2
src/sdk/pynni/tests/test_multi_phase_tuner.py
src/sdk/pynni/tests/test_multi_phase_tuner.py
+1
-1
src/sdk/pynni/tests/test_trial.py
src/sdk/pynni/tests/test_trial.py
+1
-1
src/webui/package.json
src/webui/package.json
+5
-3
src/webui/src/App.css
src/webui/src/App.css
+2
-6
src/webui/src/App.tsx
src/webui/src/App.tsx
+43
-4
src/webui/src/components/Overview.tsx
src/webui/src/components/Overview.tsx
+50
-27
src/webui/src/components/SlideBar.tsx
src/webui/src/components/SlideBar.tsx
+351
-220
src/webui/src/components/TrialsDetail.tsx
src/webui/src/components/TrialsDetail.tsx
+39
-30
src/webui/src/components/overview/Progress.tsx
src/webui/src/components/overview/Progress.tsx
+1
-1
src/webui/src/components/public-child/OpenRow.tsx
src/webui/src/components/public-child/OpenRow.tsx
+1
-1
src/webui/src/components/public-child/TrialLog.tsx
src/webui/src/components/public-child/TrialLog.tsx
+1
-1
src/webui/src/components/trial-detail/Intermeidate.tsx
src/webui/src/components/trial-detail/Intermeidate.tsx
+2
-2
src/webui/src/components/trial-detail/Para.tsx
src/webui/src/components/trial-detail/Para.tsx
+19
-10
src/webui/src/components/trial-detail/TableList.tsx
src/webui/src/components/trial-detail/TableList.tsx
+7
-5
src/webui/src/index.css
src/webui/src/index.css
+3
-3
src/webui/src/static/function.ts
src/webui/src/static/function.ts
+1
-1
No files found.
src/sdk/pynni/nni/platform/local.py
View file @
12410686
src/sdk/pynni/nni/smac_tuner/convert_ss_to_scenario.py
View file @
12410686
src/sdk/pynni/nni/smac_tuner/smac_tuner.py
View file @
12410686
src/sdk/pynni/nni/smartparam.py
View file @
12410686
...
...
@@ -124,7 +124,7 @@ else:
funcs_args
,
fixed_inputs
,
optional_inputs
,
optional_input_size
=
0
):
optional_input_size
):
'''execute the chosen function and inputs.
Below is an example of chosen function and inputs:
{
...
...
@@ -149,7 +149,7 @@ else:
chosen_layer
=
mutable_block
[
mutable_layer_id
][
"chosen_layer"
]
chosen_inputs
=
mutable_block
[
mutable_layer_id
][
"chosen_inputs"
]
real_chosen_inputs
=
[
optional_inputs
[
input_name
]
for
input_name
in
chosen_inputs
]
layer_out
=
funcs
[
chosen_layer
]([
fixed_inputs
,
real_chosen_inputs
],
*
funcs_args
[
chosen_layer
])
layer_out
=
funcs
[
chosen_layer
]([
fixed_inputs
,
real_chosen_inputs
],
*
*
funcs_args
[
chosen_layer
])
return
layer_out
...
...
src/sdk/pynni/tests/test_multi_phase_tuner.py
View file @
12410686
src/sdk/pynni/tests/test_trial.py
View file @
12410686
src/webui/package.json
View file @
12410686
...
...
@@ -9,11 +9,12 @@
"copy-to-clipboard"
:
"^3.0.8"
,
"echarts"
:
"^4.1.0"
,
"echarts-for-react"
:
"^2.0.14"
,
"react"
:
"^16.
4
.2"
,
"react-dom"
:
"^16.
4
.2"
,
"react"
:
"^16.
7.0-alpha
.2"
,
"react-dom"
:
"^16.
7.0-alpha
.2"
,
"react-json-tree"
:
"^0.11.0"
,
"react-monaco-editor"
:
"^0.22.0"
,
"react-router"
:
"3.2.1"
,
"react-responsive"
:
"^7.0.0"
,
"react-scripts-ts-antd"
:
"2.17.0"
},
"scripts"
:
{
...
...
@@ -28,6 +29,7 @@
"@types/react"
:
"^16.4.17"
,
"@types/react-dom"
:
"^16.0.7"
,
"@types/react-json-tree"
:
"^0.6.8"
,
"@types/react-responsive"
:
"^3.0.3"
,
"@types/react-router"
:
"3.0.15"
,
"typescript"
:
"^3.0.1"
}
...
...
src/webui/src/App.css
View file @
12410686
...
...
@@ -15,9 +15,7 @@
border-right
:
1px
solid
#ccc
;
z-index
:
1000
;
}
.headerCon
{
min-width
:
1024px
;
}
.contentBox
{
width
:
100%
;
}
...
...
@@ -29,5 +27,3 @@
margin-bottom
:
30px
;
background
:
#fff
;
}
src/webui/src/App.tsx
View file @
12410686
...
...
@@ -3,20 +3,59 @@ import { Row, Col } from 'antd';
import
'
./App.css
'
;
import
SlideBar
from
'
./components/SlideBar
'
;
class
App
extends
React
.
Component
<
{},
{}
>
{
interface
AppState
{
interval
:
number
;
whichPageToFresh
:
string
;
}
class
App
extends
React
.
Component
<
{},
AppState
>
{
public
_isMounted
:
boolean
;
constructor
(
props
:
{})
{
super
(
props
);
this
.
state
=
{
interval
:
10
,
// sendons
whichPageToFresh
:
''
};
}
changeInterval
=
(
interval
:
number
)
=>
{
if
(
this
.
_isMounted
===
true
)
{
this
.
setState
(()
=>
({
interval
:
interval
}));
}
}
changeFresh
=
(
fresh
:
string
)
=>
{
// interval * 1000
if
(
this
.
_isMounted
===
true
)
{
this
.
setState
(()
=>
({
whichPageToFresh
:
fresh
}));
}
}
componentDidMount
()
{
this
.
_isMounted
=
true
;
}
componentWillUnmount
()
{
this
.
_isMounted
=
false
;
}
render
()
{
const
{
interval
,
whichPageToFresh
}
=
this
.
state
;
const
reactPropsChildren
=
React
.
Children
.
map
(
this
.
props
.
children
,
child
=>
// tslint:disable-next-line:no-any
React
.
cloneElement
(
child
as
React
.
ReactElement
<
any
>
,
{
interval
,
whichPageToFresh
})
);
return
(
<
Row
className
=
"nni"
style
=
{
{
minHeight
:
window
.
innerHeight
}
}
>
<
Row
className
=
"nni"
style
=
{
{
minHeight
:
window
.
innerHeight
}
}
>
<
Row
className
=
"header"
>
<
Col
span
=
{
1
}
/>
<
Col
className
=
"headerCon"
span
=
{
22
}
>
<
SlideBar
/>
<
SlideBar
changeInterval
=
{
this
.
changeInterval
}
changeFresh
=
{
this
.
changeFresh
}
/>
</
Col
>
<
Col
span
=
{
1
}
/>
</
Row
>
<
Row
className
=
"contentBox"
>
<
Row
className
=
"content"
>
{
this
.
p
rops
.
c
hildren
}
{
reactP
rops
C
hildren
}
</
Row
>
</
Row
>
</
Row
>
...
...
src/webui/src/components/Overview.tsx
View file @
12410686
...
...
@@ -39,13 +39,18 @@ interface OverviewState {
isMultiPhase
:
boolean
;
}
class
Overview
extends
React
.
Component
<
{},
OverviewState
>
{
interface
OverviewProps
{
interval
:
number
;
// user select
whichPageToFresh
:
string
;
}
class
Overview
extends
React
.
Component
<
OverviewProps
,
OverviewState
>
{
public
_isMounted
=
false
;
public
intervalID
=
0
;
public
intervalProfile
=
1
;
constructor
(
props
:
{}
)
{
constructor
(
props
:
OverviewProps
)
{
super
(
props
);
this
.
state
=
{
searchSpace
:
{},
...
...
@@ -377,6 +382,7 @@ class Overview extends React.Component<{}, OverviewState> {
data
:
accarr
}]
};
if
(
this
.
_isMounted
)
{
this
.
setState
({
accuracyData
:
accOption
},
()
=>
{
if
(
accarr
.
length
===
0
)
{
this
.
setState
({
...
...
@@ -389,6 +395,7 @@ class Overview extends React.Component<{}, OverviewState> {
}
});
}
}
clickMaxTop
=
(
event
:
React
.
SyntheticEvent
<
EventTarget
>
)
=>
{
event
.
stopPropagation
();
...
...
@@ -405,23 +412,39 @@ class Overview extends React.Component<{}, OverviewState> {
isOffInterval
=
()
=>
{
const
{
status
}
=
this
.
state
;
switch
(
status
)
{
case
'
DONE
'
:
case
'
ERROR
'
:
case
'
STOPPED
'
:
const
{
interval
}
=
this
.
props
;
if
(
status
===
'
DONE
'
||
status
===
'
ERROR
'
||
status
===
'
STOPPED
'
||
interval
===
0
)
{
window
.
clearInterval
(
this
.
intervalID
);
window
.
clearInterval
(
this
.
intervalProfile
);
break
;
default
:
return
;
}
}
componentWillReceiveProps
(
nextProps
:
OverviewProps
)
{
const
{
interval
,
whichPageToFresh
}
=
nextProps
;
window
.
clearInterval
(
this
.
intervalID
);
window
.
clearInterval
(
this
.
intervalProfile
);
if
(
whichPageToFresh
.
includes
(
'
/oview
'
))
{
this
.
showTrials
();
this
.
showSessionPro
();
}
if
(
interval
!==
0
)
{
this
.
intervalID
=
window
.
setInterval
(
this
.
showTrials
,
interval
*
1000
);
this
.
intervalProfile
=
window
.
setInterval
(
this
.
showSessionPro
,
interval
*
1000
);
}
}
componentDidMount
()
{
this
.
_isMounted
=
true
;
this
.
showSessionPro
()
;
const
{
interval
}
=
this
.
props
;
this
.
showTrials
();
this
.
intervalID
=
window
.
setInterval
(
this
.
showTrials
,
10000
);
this
.
intervalProfile
=
window
.
setInterval
(
this
.
showSessionPro
,
60000
);
this
.
showSessionPro
();
if
(
interval
!==
0
)
{
this
.
intervalID
=
window
.
setInterval
(
this
.
showTrials
,
interval
*
1000
);
this
.
intervalProfile
=
window
.
setInterval
(
this
.
showSessionPro
,
interval
*
1000
);
}
}
componentWillUnmount
()
{
...
...
@@ -447,7 +470,7 @@ class Overview extends React.Component<{}, OverviewState> {
</
Row
>
<
Row
className
=
"overMessage"
>
{
/* status graph */
}
<
Col
span
=
{
9
}
className
=
"prograph overviewBoder"
>
<
Col
span
=
{
9
}
className
=
"prograph overviewBoder
cc
"
>
<
Title1
text
=
"Status"
icon
=
"5.png"
/>
<
Progressed
trialNumber
=
{
trialNumber
}
...
...
@@ -459,13 +482,13 @@ class Overview extends React.Component<{}, OverviewState> {
/>
</
Col
>
{
/* experiment parameters search space tuner assessor... */
}
<
Col
span
=
{
7
}
className
=
"overviewBoder"
>
<
Col
span
=
{
7
}
className
=
"overviewBoder
cc
"
>
<
Title1
text
=
"Search space"
icon
=
"10.png"
/>
<
Row
className
=
"experiment"
>
<
SearchSpace
searchSpace
=
{
searchSpace
}
/>
</
Row
>
</
Col
>
<
Col
span
=
{
8
}
className
=
"overviewBoder"
>
<
Col
span
=
{
8
}
className
=
"overviewBoder
cc
"
>
<
Title1
text
=
"Profile"
icon
=
"4.png"
/>
<
Row
className
=
"experiment"
>
{
/* the scroll bar all the trial profile in the searchSpace div*/
}
...
...
src/webui/src/components/SlideBar.tsx
View file @
12410686
import
*
as
React
from
'
react
'
;
import
{
Link
}
from
'
react-router
'
;
import
axios
from
'
axios
'
;
import
{
DOWNLOAD_IP
}
from
'
../static/const
'
;
import
{
Row
,
Col
,
Menu
,
Dropdown
,
Icon
}
from
'
antd
'
;
import
{
MANAGER_IP
}
from
'
../static/const
'
;
import
MediaQuery
from
'
react-responsive
'
;
import
{
DOWNLOAD_IP
}
from
'
../static/const
'
;
import
{
Row
,
Col
,
Menu
,
Dropdown
,
Icon
,
Select
}
from
'
antd
'
;
const
{
SubMenu
}
=
Menu
;
const
{
Option
}
=
Select
;
import
'
../static/style/slideBar.scss
'
;
import
'
../static/style/button.scss
'
;
interface
SliderState
{
version
:
string
;
menuVisible
:
boolean
;
navBarVisible
:
boolean
;
}
interface
SliderProps
{
changeInterval
:
(
value
:
number
)
=>
void
;
changeFresh
:
(
value
:
string
)
=>
void
;
}
interface
EventPer
{
key
:
string
;
}
class
SlideBar
extends
React
.
Component
<
{}
,
SliderState
>
{
class
SlideBar
extends
React
.
Component
<
SliderProps
,
SliderState
>
{
public
_isMounted
=
false
;
public
divMenu
:
HTMLDivElement
|
null
;
public
countOfMenu
:
number
=
0
;
public
selectHTML
:
Select
|
null
;
constructor
(
props
:
{}
)
{
constructor
(
props
:
SliderProps
)
{
super
(
props
);
this
.
state
=
{
version
:
''
,
menuVisible
:
false
menuVisible
:
false
,
navBarVisible
:
false
,
};
}
...
...
@@ -92,7 +105,7 @@ class SlideBar extends React.Component<{}, SliderState> {
const
aTag
=
document
.
createElement
(
'
a
'
);
const
isEdge
=
navigator
.
userAgent
.
indexOf
(
'
Edge
'
)
!==
-
1
?
true
:
false
;
const
file
=
new
Blob
([
nniLogfile
],
{
type
:
'
application/json
'
});
aTag
.
download
=
'
nnimanagerLog.
json
'
;
aTag
.
download
=
'
nnimanagerLog.
log
'
;
aTag
.
href
=
URL
.
createObjectURL
(
file
);
aTag
.
click
();
if
(
!
isEdge
)
{
...
...
@@ -101,7 +114,7 @@ class SlideBar extends React.Component<{}, SliderState> {
if
(
navigator
.
userAgent
.
indexOf
(
'
Firefox
'
)
>
-
1
)
{
const
downTag
=
document
.
createElement
(
'
a
'
);
downTag
.
addEventListener
(
'
click
'
,
function
()
{
downTag
.
download
=
'
nnimanagerLog.
json
'
;
downTag
.
download
=
'
nnimanagerLog.
log
'
;
downTag
.
href
=
URL
.
createObjectURL
(
file
);
});
let
eventMouse
=
document
.
createEvent
(
'
MouseEvents
'
);
...
...
@@ -122,7 +135,7 @@ class SlideBar extends React.Component<{}, SliderState> {
const
aTag
=
document
.
createElement
(
'
a
'
);
const
isEdge
=
navigator
.
userAgent
.
indexOf
(
'
Edge
'
)
!==
-
1
?
true
:
false
;
const
file
=
new
Blob
([
dispatchLogfile
],
{
type
:
'
application/json
'
});
aTag
.
download
=
'
dispatcherLog.
json
'
;
aTag
.
download
=
'
dispatcherLog.
log
'
;
aTag
.
href
=
URL
.
createObjectURL
(
file
);
aTag
.
click
();
if
(
!
isEdge
)
{
...
...
@@ -131,7 +144,7 @@ class SlideBar extends React.Component<{}, SliderState> {
if
(
navigator
.
userAgent
.
indexOf
(
'
Firefox
'
)
>
-
1
)
{
const
downTag
=
document
.
createElement
(
'
a
'
);
downTag
.
addEventListener
(
'
click
'
,
function
()
{
downTag
.
download
=
'
dispatcherLog.
json
'
;
downTag
.
download
=
'
dispatcherLog.
log
'
;
downTag
.
href
=
URL
.
createObjectURL
(
file
);
});
let
eventMouse
=
document
.
createEvent
(
'
MouseEvents
'
);
...
...
@@ -155,24 +168,121 @@ class SlideBar extends React.Component<{}, SliderState> {
handleMenuClick
=
(
e
:
EventPer
)
=>
{
if
(
this
.
_isMounted
)
{
this
.
setState
({
menuVisible
:
false
});
}
// download experiment related content
switch
(
e
.
key
)
{
// download experiment related content
case
'
1
'
:
this
.
downExperimentContent
();
break
;
// download nnimanager log file
case
'
2
'
:
this
.
downnnimanagerLog
();
break
;
// download dispatcher log file
case
'
3
'
:
this
.
downDispatcherlog
();
break
;
case
'
close
'
:
case
'
10
'
:
case
'
20
'
:
case
'
30
'
:
case
'
60
'
:
this
.
getInterval
(
e
.
key
);
break
;
default
:
}
}
handleVisibleChange
=
(
flag
:
boolean
)
=>
{
if
(
this
.
_isMounted
===
true
)
{
this
.
setState
({
menuVisible
:
flag
});
}
}
getInterval
=
(
value
:
string
)
=>
{
if
(
value
===
'
close
'
)
{
this
.
props
.
changeInterval
(
0
);
}
else
{
this
.
props
.
changeInterval
(
parseInt
(
value
,
10
));
}
}
menu
=
()
=>
{
this
.
countOfMenu
=
0
;
return
(
<
Menu
onClick
=
{
this
.
handleMenuClick
}
>
<
Menu
.
Item
key
=
"1"
>
Experiment Parameters
</
Menu
.
Item
>
<
Menu
.
Item
key
=
"2"
>
NNImanager Logfile
</
Menu
.
Item
>
<
Menu
.
Item
key
=
"3"
>
Dispatcher Logfile
</
Menu
.
Item
>
</
Menu
>
);
}
// nav bar
navigationBar
=
()
=>
{
const
{
version
}
=
this
.
state
;
const
feedBackLink
=
`https://github.com/Microsoft/nni/issues/new?labels=
${
version
}
`
;
return
(
<
Menu
onClick
=
{
this
.
handleMenuClick
}
mode
=
"inline"
>
<
Menu
.
Item
key
=
"overview"
><
Link
to
=
{
'
/oview
'
}
>
Overview
</
Link
></
Menu
.
Item
>
<
Menu
.
Item
key
=
"detail"
><
Link
to
=
{
'
/detail
'
}
>
Trials detail
</
Link
></
Menu
.
Item
>
<
Menu
.
Item
key
=
"fresh"
>
<
span
className
=
"fresh"
onClick
=
{
this
.
fresh
}
><
span
>
Fresh
</
span
></
span
>
</
Menu
.
Item
>
<
Menu
.
Item
key
=
"feedback"
>
<
a
href
=
{
feedBackLink
}
target
=
"_blank"
>
Feedback
</
a
>
</
Menu
.
Item
>
<
Menu
.
Item
key
=
"version"
>
Version:
{
version
}
</
Menu
.
Item
>
<
SubMenu
key
=
"download"
onChange
=
{
this
.
handleVisibleChange
}
title
=
{
<
span
>
<
span
>
Download
</
span
>
</
span
>
}
>
<
Menu
.
Item
key
=
"1"
>
Experiment Parameters
</
Menu
.
Item
>
<
Menu
.
Item
key
=
"2"
>
NNImanager Logfile
</
Menu
.
Item
>
<
Menu
.
Item
key
=
"3"
>
Dispatcher Logfile
</
Menu
.
Item
>
</
SubMenu
>
</
Menu
>
);
}
// nav bar <1299
showMenu
=
()
=>
{
if
(
this
.
divMenu
!==
null
)
{
this
.
countOfMenu
=
this
.
countOfMenu
+
1
;
if
(
this
.
countOfMenu
%
2
===
0
)
{
this
.
divMenu
.
setAttribute
(
'
class
'
,
'
hide
'
);
}
else
{
this
.
divMenu
.
setAttribute
(
'
class
'
,
'
show
'
);
}
}
}
select
=
()
=>
{
return
(
<
Select
onSelect
=
{
this
.
getInterval
}
defaultValue
=
"Refresh every 10s"
className
=
"interval"
>
<
Option
value
=
"close"
>
Disable Auto Refresh
</
Option
>
<
Option
value
=
"10"
>
Refresh every 10s
</
Option
>
<
Option
value
=
"20"
>
Refresh every 20s
</
Option
>
<
Option
value
=
"30"
>
Refresh every 30s
</
Option
>
<
Option
value
=
"60"
>
Refresh every 1min
</
Option
>
</
Select
>
);
}
fresh
=
(
event
:
React
.
SyntheticEvent
<
EventTarget
>
)
=>
{
event
.
preventDefault
();
const
whichPage
=
window
.
location
.
pathname
;
this
.
props
.
changeFresh
(
whichPage
);
}
componentDidMount
()
{
this
.
_isMounted
=
true
;
...
...
@@ -186,20 +296,18 @@ class SlideBar extends React.Component<{}, SliderState> {
render
()
{
const
{
version
,
menuVisible
}
=
this
.
state
;
const
feed
=
`https://github.com/Microsoft/nni/issues/new?labels=
${
version
}
`
;
const
menu
=
(
<
Menu
onClick
=
{
this
.
handleMenuClick
}
>
<
Menu
.
Item
key
=
"1"
>
Experiment Parameters
</
Menu
.
Item
>
<
Menu
.
Item
key
=
"2"
>
NNImanager Logfile
</
Menu
.
Item
>
<
Menu
.
Item
key
=
"3"
>
Dispatcher Logfile
</
Menu
.
Item
>
</
Menu
>
);
return
(
<
Row
>
<
MediaQuery
query
=
"(min-width: 1299px)"
>
<
Row
className
=
"nav"
>
<
Col
span
=
{
8
}
>
<
ul
className
=
"link"
>
<
li
className
=
"logo"
>
<
Link
to
=
{
'
/oview
'
}
>
<
img
src
=
{
require
(
'
../static/img/logo2.png
'
)
}
style
=
{
{
width
:
88
}
}
alt
=
"NNI logo"
/>
<
img
src
=
{
require
(
'
../static/img/logo2.png
'
)
}
style
=
{
{
width
:
88
}
}
alt
=
"NNI logo"
/>
</
Link
>
</
li
>
<
li
className
=
"tab firstTab"
>
...
...
@@ -212,14 +320,16 @@ class SlideBar extends React.Component<{}, SliderState> {
Trials detail
</
Link
>
</
li
>
</
ul
>
</
Col
>
<
Col
span
=
{
16
}
className
=
"feedback"
>
<
li
className
=
"feedback"
>
<
span
className
=
"fresh"
onClick
=
{
this
.
fresh
}
>
<
Icon
type
=
"sync"
/><
span
>
Fresh
</
span
>
</
span
>
<
Dropdown
className
=
"dropdown"
overlay
=
{
menu
}
overlay
=
{
this
.
menu
()
}
onVisibleChange
=
{
this
.
handleVisibleChange
}
visible
=
{
menuVisible
}
trigger
=
{
[
'
click
'
]
}
>
<
a
className
=
"ant-dropdown-link"
href
=
"#"
>
Download
<
Icon
type
=
"down"
/>
...
...
@@ -233,7 +343,28 @@ class SlideBar extends React.Component<{}, SliderState> {
Feedback
</
a
>
<
span
className
=
"version"
>
Version:
{
version
}
</
span
>
</
li
>
</
ul
>
</
Row
>
</
MediaQuery
>
<
MediaQuery
query
=
"(max-width: 1299px)"
>
<
Row
className
=
"little"
>
<
Col
span
=
{
6
}
className
=
"menu"
>
<
Icon
type
=
"unordered-list"
className
=
"more"
onClick
=
{
this
.
showMenu
}
/>
<
div
ref
=
{
div
=>
this
.
divMenu
=
div
}
className
=
"hide"
>
{
this
.
navigationBar
()
}
</
div
>
</
Col
>
<
Col
span
=
{
10
}
className
=
"logo"
>
<
Link
to
=
{
'
/oview
'
}
>
<
img
src
=
{
require
(
'
../static/img/logo2.png
'
)
}
style
=
{
{
width
:
88
}
}
alt
=
"NNI logo"
/>
</
Link
>
</
Col
>
</
Row
>
</
MediaQuery
>
{
this
.
select
()
}
</
Row
>
);
}
...
...
src/webui/src/components/TrialsDetail.tsx
View file @
12410686
...
...
@@ -27,14 +27,18 @@ interface TrialDetailState {
entriesInSelect
:
string
;
searchSpace
:
string
;
isMultiPhase
:
boolean
;
isTableLoading
:
boolean
;
whichGraph
:
string
;
hyperCounts
:
number
;
// user click the hyper-parameter counts
durationCounts
:
number
;
intermediateCounts
:
number
;
}
class
TrialsDetail
extends
React
.
Component
<
{},
TrialDetailState
>
{
interface
TrialsDetailProps
{
interval
:
number
;
whichPageToFresh
:
string
;
}
class
TrialsDetail
extends
React
.
Component
<
TrialsDetailProps
,
TrialDetailState
>
{
public
_isMounted
=
false
;
public
interAccuracy
=
0
;
...
...
@@ -62,7 +66,7 @@ class TrialsDetail extends React.Component<{}, TrialDetailState> {
</
div
>
);
constructor
(
props
:
{}
)
{
constructor
(
props
:
TrialsDetailProps
)
{
super
(
props
);
this
.
state
=
{
...
...
@@ -79,7 +83,6 @@ class TrialsDetail extends React.Component<{}, TrialDetailState> {
whichGraph
:
'
1
'
,
isHasSearch
:
false
,
isMultiPhase
:
false
,
isTableLoading
:
false
,
hyperCounts
:
0
,
durationCounts
:
0
,
intermediateCounts
:
0
...
...
@@ -95,9 +98,6 @@ class TrialsDetail extends React.Component<{}, TrialDetailState> {
])
.
then
(
axios
.
spread
((
res
,
res1
)
=>
{
if
(
res
.
status
===
200
&&
res1
.
status
===
200
)
{
if
(
this
.
_isMounted
===
true
)
{
this
.
setState
(()
=>
({
isTableLoading
:
true
}));
}
const
trialJobs
=
res
.
data
;
const
metricSource
=
res1
.
data
;
const
trialTable
:
Array
<
TableObj
>
=
[];
...
...
@@ -187,10 +187,7 @@ class TrialsDetail extends React.Component<{}, TrialDetailState> {
}
}
if
(
this
.
_isMounted
)
{
this
.
setState
(()
=>
({
isTableLoading
:
false
,
tableListSource
:
trialTable
}));
this
.
setState
(()
=>
({
tableListSource
:
trialTable
}));
}
if
(
entriesInSelect
===
'
all
'
&&
this
.
_isMounted
)
{
this
.
setState
(()
=>
({
...
...
@@ -235,22 +232,25 @@ class TrialsDetail extends React.Component<{}, TrialDetailState> {
// close timer
isOffIntervals
=
()
=>
{
const
{
interval
}
=
this
.
props
;
if
(
interval
===
0
)
{
window
.
clearInterval
(
this
.
interTableList
);
return
;
}
else
{
axios
(
`
${
MANAGER_IP
}
/check-status`
,
{
method
:
'
GET
'
})
.
then
(
res
=>
{
if
(
res
.
status
===
200
&&
this
.
_isMounted
)
{
switch
(
res
.
data
.
status
)
{
case
'
DONE
'
:
case
'
ERROR
'
:
case
'
STOPPED
'
:
const
expStatus
=
res
.
data
.
status
;
if
(
expStatus
===
'
DONE
'
||
expStatus
===
'
ERROR
'
||
expStatus
===
'
STOPPED
'
)
{
window
.
clearInterval
(
this
.
interTableList
);
break
;
default
:
return
;
}
}
});
}
}
handleEntriesSelect
=
(
value
:
string
)
=>
{
// user select isn't 'all'
...
...
@@ -312,11 +312,23 @@ class TrialsDetail extends React.Component<{}, TrialDetailState> {
});
}
componentWillReceiveProps
(
nextProps
:
TrialsDetailProps
)
{
const
{
interval
,
whichPageToFresh
}
=
nextProps
;
window
.
clearInterval
(
this
.
interTableList
);
if
(
interval
!==
0
)
{
this
.
interTableList
=
window
.
setInterval
(
this
.
getDetailSource
,
interval
*
1000
);
}
if
(
whichPageToFresh
.
includes
(
'
/detail
'
))
{
this
.
getDetailSource
();
}
}
componentDidMount
()
{
this
.
_isMounted
=
true
;
const
{
interval
}
=
this
.
props
;
this
.
getDetailSource
();
this
.
interTableList
=
window
.
setInterval
(
this
.
getDetailSource
,
1
0
000
);
this
.
interTableList
=
window
.
setInterval
(
this
.
getDetailSource
,
interval
*
1000
);
this
.
checkExperimentPlatform
();
}
...
...
@@ -330,14 +342,13 @@ class TrialsDetail extends React.Component<{}, TrialDetailState> {
const
{
tableListSource
,
searchResultSource
,
isHasSearch
,
isMultiPhase
,
entriesTable
,
experimentPlatform
,
searchSpace
,
experimentLogCollection
,
whichGraph
,
isTableLoading
whichGraph
}
=
this
.
state
;
const
source
=
isHasSearch
?
searchResultSource
:
tableListSource
;
return
(
<
div
>
<
div
className
=
"trial"
id
=
"tabsty"
>
<
Tabs
type
=
"card"
onChange
=
{
this
.
handleWhichTabs
}
>
{
/* <TabPane tab={this.titleOfacc} key="1" destroyInactiveTabPane={true}> */
}
<
TabPane
tab
=
{
this
.
titleOfacc
}
key
=
"1"
>
<
Row
className
=
"graph"
>
<
DefaultPoint
...
...
@@ -358,7 +369,6 @@ class TrialsDetail extends React.Component<{}, TrialDetailState> {
</
TabPane
>
<
TabPane
tab
=
{
this
.
titleOfDuration
}
key
=
"3"
>
<
Duration
source
=
{
source
}
whichGraph
=
{
whichGraph
}
/>
{
/* <Duration source={source} whichGraph={whichGraph} clickCounts={durationCounts} /> */
}
</
TabPane
>
<
TabPane
tab
=
{
this
.
titleOfIntermediate
}
key
=
"4"
>
<
Intermediate
source
=
{
source
}
whichGraph
=
{
whichGraph
}
/>
...
...
@@ -407,7 +417,6 @@ class TrialsDetail extends React.Component<{}, TrialDetailState> {
<
TableList
entries
=
{
entriesTable
}
tableSource
=
{
source
}
isTableLoading
=
{
isTableLoading
}
isMultiPhase
=
{
isMultiPhase
}
platform
=
{
experimentPlatform
}
updateList
=
{
this
.
getDetailSource
}
...
...
src/webui/src/components/overview/Progress.tsx
View file @
12410686
src/webui/src/components/public-child/OpenRow.tsx
View file @
12410686
...
...
@@ -123,7 +123,7 @@ class OpenRow extends React.Component<OpenRowProps, OpenRowState> {
<
Button
onClick
=
{
this
.
showFormatModal
.
bind
(
this
,
record
)
}
>
Copy as
pyth
on
Copy as
js
on
</
Button
>
</
Row
>
</
Row
>
...
...
src/webui/src/components/public-child/TrialLog.tsx
View file @
12410686
src/webui/src/components/trial-detail/Intermeidate.tsx
View file @
12410686
...
...
@@ -115,13 +115,13 @@ class Intermediate extends React.Component<IntermediateProps, IntermediateState>
},
xAxis
:
{
type
:
'
category
'
,
name
:
'
S
cape
'
,
name
:
'
S
tep
'
,
boundaryGap
:
false
,
data
:
xAxis
},
yAxis
:
{
type
:
'
value
'
,
name
:
'
Intermediate
'
name
:
'
metric
'
},
series
:
trialIntermediate
};
...
...
src/webui/src/components/trial-detail/Para.tsx
View file @
12410686
...
...
@@ -22,6 +22,7 @@ interface ParaState {
max
:
number
;
// graph color bar limit
min
:
number
;
sutrialCount
:
number
;
// succeed trial numbers for SUC
succeedRenderCount
:
number
;
// all succeed trials number
clickCounts
:
number
;
isLoadConfirm
:
boolean
;
}
...
...
@@ -68,6 +69,7 @@ class Para extends React.Component<ParaProps, ParaState> {
min
:
0
,
max
:
1
,
sutrialCount
:
10000000
,
succeedRenderCount
:
10000000
,
clickCounts
:
1
,
isLoadConfirm
:
false
};
...
...
@@ -76,7 +78,8 @@ class Para extends React.Component<ParaProps, ParaState> {
getParallelAxis
=
(
dimName
:
Array
<
string
>
,
parallelAxis
:
Array
<
Dimobj
>
,
accPara
:
Array
<
number
>
,
eachTrialParams
:
Array
<
string
>
accPara
:
Array
<
number
>
,
eachTrialParams
:
Array
<
string
>
,
lengthofTrials
:
number
)
=>
{
// get data for every lines. if dim is choice type, number -> toString()
const
paraYdata
:
number
[][]
=
[];
...
...
@@ -120,7 +123,7 @@ class Para extends React.Component<ParaProps, ParaState> {
if
(
swapAxisArr
.
length
>=
2
)
{
this
.
swapGraph
(
paraData
,
swapAxisArr
);
}
this
.
getOption
(
paraData
);
this
.
getOption
(
paraData
,
lengthofTrials
);
if
(
this
.
_isMounted
===
true
)
{
this
.
setState
(()
=>
({
paraBack
:
paraData
}));
}
...
...
@@ -159,8 +162,8 @@ class Para extends React.Component<ParaProps, ParaState> {
parallelAxis
.
push
({
dim
:
i
,
name
:
dimName
[
i
],
m
ax
:
searchKey
.
_value
[
0
]
-
1
,
m
in
:
0
m
in
:
searchKey
.
_value
[
0
],
m
ax
:
searchKey
.
_value
[
1
],
});
break
;
...
...
@@ -248,7 +251,8 @@ class Para extends React.Component<ParaProps, ParaState> {
this
.
setState
({
paraNodata
:
'
No data
'
,
option
:
optionOfNull
,
sutrialCount
:
0
sutrialCount
:
0
,
succeedRenderCount
:
0
});
}
}
else
{
...
...
@@ -265,7 +269,7 @@ class Para extends React.Component<ParaProps, ParaState> {
});
if
(
this
.
_isMounted
)
{
this
.
setState
({
max
:
Math
.
max
(...
accPara
),
min
:
Math
.
min
(...
accPara
)
},
()
=>
{
this
.
getParallelAxis
(
dimName
,
parallelAxis
,
accPara
,
eachTrialParams
);
this
.
getParallelAxis
(
dimName
,
parallelAxis
,
accPara
,
eachTrialParams
,
lenOfDataSource
);
});
}
}
...
...
@@ -283,7 +287,7 @@ class Para extends React.Component<ParaProps, ParaState> {
}
// deal with response data into pic data
getOption
=
(
dataObj
:
ParaObj
)
=>
{
getOption
=
(
dataObj
:
ParaObj
,
lengthofTrials
:
number
)
=>
{
// dataObj [[y1], [y2]... [default metric]]
const
{
max
,
min
}
=
this
.
state
;
const
parallelAxis
=
dataObj
.
parallelAxis
;
...
...
@@ -348,6 +352,7 @@ class Para extends React.Component<ParaProps, ParaState> {
this
.
setState
(()
=>
({
option
:
optionown
,
paraNodata
:
''
,
succeedRenderCount
:
lengthofTrials
,
sutrialCount
:
paralleData
.
length
}));
}
...
...
@@ -367,7 +372,7 @@ class Para extends React.Component<ParaProps, ParaState> {
}
swapReInit
=
()
=>
{
const
{
clickCounts
}
=
this
.
state
;
const
{
clickCounts
,
succeedRenderCount
}
=
this
.
state
;
const
val
=
clickCounts
+
1
;
if
(
this
.
_isMounted
)
{
this
.
setState
({
isLoadConfirm
:
true
,
clickCounts
:
val
,
});
...
...
@@ -419,7 +424,7 @@ class Para extends React.Component<ParaProps, ParaState> {
paraData
[
paraItem
][
dim1
]
=
paraData
[
paraItem
][
dim2
];
paraData
[
paraItem
][
dim2
]
=
temp
;
});
this
.
getOption
(
paraBack
);
this
.
getOption
(
paraBack
,
succeedRenderCount
);
// please wait the data
if
(
this
.
_isMounted
)
{
this
.
setState
(()
=>
({
...
...
@@ -503,12 +508,16 @@ class Para extends React.Component<ParaProps, ParaState> {
return
true
;
}
const
{
sutrialCount
,
clickCounts
}
=
nextState
;
const
{
sutrialCount
,
clickCounts
,
succeedRenderCount
}
=
nextState
;
const
beforeCount
=
this
.
state
.
sutrialCount
;
const
beforeClickCount
=
this
.
state
.
clickCounts
;
const
beforeRealRenderCount
=
this
.
state
.
succeedRenderCount
;
if
(
sutrialCount
!==
beforeCount
)
{
return
true
;
}
if
(
succeedRenderCount
!==
beforeRealRenderCount
)
{
return
true
;
}
if
(
clickCounts
!==
beforeClickCount
)
{
return
true
;
...
...
src/webui/src/components/trial-detail/TableList.tsx
View file @
12410686
...
...
@@ -30,7 +30,6 @@ interface TableListProps {
platform
:
string
;
logCollection
:
boolean
;
isMultiPhase
:
boolean
;
isTableLoading
:
boolean
;
}
interface
TableListState
{
...
...
@@ -195,7 +194,7 @@ class TableList extends React.Component<TableListProps, TableListState> {
render
()
{
const
{
entries
,
tableSource
,
updateList
,
isTableLoading
}
=
this
.
props
;
const
{
entries
,
tableSource
,
updateList
}
=
this
.
props
;
const
{
intermediateOption
,
modalVisible
,
isShowColumn
,
columnSelected
}
=
this
.
state
;
let
showTitle
=
COLUMN
;
let
bgColor
=
''
;
...
...
@@ -264,8 +263,12 @@ class TableList extends React.Component<TableListProps, TableListState> {
sorter
:
(
a
:
TableObj
,
b
:
TableObj
)
=>
(
a
.
duration
as
number
)
-
(
b
.
duration
as
number
),
render
:
(
text
:
string
,
record
:
TableObj
)
=>
{
let
duration
;
if
(
record
.
duration
!==
undefined
&&
record
.
duration
>
0
)
{
if
(
record
.
duration
!==
undefined
)
{
if
(
record
.
duration
>
0
&&
record
.
duration
<
1
)
{
duration
=
`
${
record
.
duration
}
s`
;
}
else
{
duration
=
convertDuration
(
record
.
duration
);
}
}
else
{
duration
=
0
;
}
...
...
@@ -418,7 +421,6 @@ class TableList extends React.Component<TableListProps, TableListState> {
dataSource
=
{
tableSource
}
className
=
"commonTableStyle"
pagination
=
{
{
pageSize
:
entries
}
}
loading
=
{
isTableLoading
}
/>
{
/* Intermediate Result Modal */
}
<
Modal
...
...
src/webui/src/index.css
View file @
12410686
src/webui/src/static/function.ts
View file @
12410686
Prev
1
…
6
7
8
9
10
11
12
Next
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment