未验证 提交 e698eda6 编写于 作者: P Peter Pan 提交者: GitHub

feat: pr-curve (#681)

上级 dc3bebb8
......@@ -41,7 +41,7 @@
"yargs": "15.3.1"
},
"devDependencies": {
"@types/node": "14.0.13",
"@types/node": "14.0.14",
"@types/yargs": "15.0.5",
"cross-env": "7.0.2",
"ts-node": "8.10.2",
......
......@@ -14,7 +14,7 @@ const Label = styled.div`
`;
type FieldProps = {
label?: string;
label?: string | JSX.Element;
};
const Field: FunctionComponent<FieldProps & WithStyled> = ({label, children, className}) => (
......
......@@ -55,7 +55,6 @@ type HistogramChartProps = {
tag: string;
mode: Modes;
running?: boolean;
onToggleMaximized?: (maximized: boolean) => void;
};
const HistogramChart: FunctionComponent<HistogramChartProps> = ({cid, run, tag, mode, running}) => {
......
......@@ -18,6 +18,17 @@ type LineChartProps = {
zoom?: boolean;
};
export enum XAxisType {
value = 'value',
log = 'log',
time = 'time'
}
export enum YAxisType {
value = 'value',
log = 'log'
}
export type LineChartRef = {
restore(): void;
saveAsImage(): void;
......
import LineChart, {LineChartRef} from '~/components/LineChart';
import {PRCurveData, Run, options as chartOptions, nearestPoint} from '~/resource/pr-curve';
import React, {FunctionComponent, useCallback, useMemo, useRef, useState} from 'react';
import {rem, size} from '~/utils/style';
import ChartToolbox from '~/components/ChartToolbox';
import {EChartOption} from 'echarts';
import TooltipTable from '~/components/TooltipTable';
import {cycleFetcher} from '~/utils/fetch';
import ee from '~/utils/event';
import {format} from 'd3-format';
import queryString from 'query-string';
import {renderToStaticMarkup} from 'react-dom/server';
import styled from 'styled-components';
import {useRunningRequest} from '~/hooks/useRequest';
import {useTranslation} from '~/utils/i18n';
import zip from 'lodash/zip';
const axisFormatter = format('.4f');
const valueFormatter = format('.2f');
const Wrapper = styled.div`
${size('100%', '100%')}
display: flex;
flex-direction: column;
align-items: stretch;
justify-content: space-between;
`;
const StyledLineChart = styled(LineChart)`
flex-grow: 1;
`;
const Toolbox = styled(ChartToolbox)`
margin-left: ${rem(20)};
margin-right: ${rem(20)};
margin-bottom: ${rem(18)};
`;
const Error = styled.div`
${size('100%', '100%')}
display: flex;
justify-content: center;
align-items: center;
`;
type PRCurveChartProps = {
cid: symbol;
runs: Run[];
tag: string;
running?: boolean;
};
const PRCurveChart: FunctionComponent<PRCurveChartProps> = ({cid, runs, tag, running}) => {
const {t} = useTranslation(['pr-curve', 'common']);
const echart = useRef<LineChartRef>(null);
const {data: dataset, error, loading} = useRunningRequest<PRCurveData[]>(
runs.map(run => `/pr-curve/list?${queryString.stringify({run: run.label, tag})}`),
!!running,
(...urls) => cycleFetcher(urls)
);
const [maximized, setMaximized] = useState<boolean>(false);
const toggleMaximized = useCallback(() => {
ee.emit('toggle-chart-size', cid, !maximized);
setMaximized(m => !m);
}, [cid, maximized]);
const selectedData = useMemo<[number, number, number[][]][]>(
() =>
runs.map((run, i) => {
const [wallTime, step, ...item] = dataset?.[i]?.find(row => row[1] === run.steps[run.index]) ?? [
0,
0,
[],
[],
[],
[],
[],
[],
[]
];
return [wallTime, step, zip(...item) as number[][]];
}),
[dataset, runs]
);
const data = useMemo(
() =>
selectedData.map((item, i) => {
const run = runs[i];
return {
name: run.label,
z: i,
itemStyle: {
color: run.colors[0]
},
lineStyle: {
color: run.colors[0]
},
data: item[2],
encode: {
x: [1],
y: [0]
}
};
}),
[selectedData, runs]
);
const formatter = useCallback(
(params: EChartOption.Tooltip.Format | EChartOption.Tooltip.Format[]) => {
const series = Array.isArray(params) ? params[0].data : params.data;
const points = nearestPoint(
selectedData.map(s => s[2]),
series[1]
);
const columns = [
{
label: t('pr-curve:threshold')
},
{
label: t('pr-curve:precision')
},
{
label: t('pr-curve:recall')
},
{
label: t('pr-curve:true-positives')
},
{
label: t('pr-curve:false-positives')
},
{
label: t('pr-curve:true-negatives')
},
{
label: t('pr-curve:false-negatives')
}
];
const data = points.map(([precision, recall, tp, fp, tn, fn, threshold]) => [
valueFormatter(threshold),
axisFormatter(precision),
axisFormatter(recall),
tp,
fp,
tn,
fn
]);
return renderToStaticMarkup(
<TooltipTable run={t('common:runs')} runs={runs} columns={columns} data={data} />
);
},
[selectedData, runs, t]
);
const options = useMemo(
() => ({
...chartOptions,
tooltip: {
...chartOptions.tooltip,
formatter
}
}),
[formatter]
);
// display error only on first fetch
if (!data && error) {
return <Error>{t('common:error')}</Error>;
}
return (
<Wrapper>
<StyledLineChart ref={echart} title={tag} options={options} data={data} loading={loading} zoom />
<Toolbox
items={[
{
icon: 'maximize',
activeIcon: 'minimize',
tooltip: t('scalars:maximize'),
activeTooltip: t('scalars:minimize'),
toggle: true,
onClick: toggleMaximized
},
{
icon: 'restore-size',
tooltip: t('scalars:restore'),
onClick: () => echart.current?.restore()
},
{
icon: 'download',
tooltip: t('scalars:download-image'),
onClick: () => echart.current?.saveAsImage()
}
]}
/>
</Wrapper>
);
};
export default PRCurveChart;
import React, {FunctionComponent, useEffect, useState} from 'react';
import {Run, TimeType} from '~/resource/pr-curve';
import {ellipsis, size, textLighterColor} from '~/utils/style';
import Field from '~/components/Field';
import RangeSlider from '~/components/RangeSlider';
import {format} from 'd3-format';
import {formatTime} from '~/utils';
import styled from 'styled-components';
import {useTranslation} from '~/utils/i18n';
const relativeFormatter = format('.2f');
const TimeDisplay = styled.div`
color: ${textLighterColor};
font-size: 0.857142857em;
padding-left: 1.666666667em;
margin-bottom: 0.416666667em;
`;
const Label = styled.span<{color: string}>`
display: inline-block;
padding-left: 1.428571429em;
position: relative;
${ellipsis()}
&::before {
content: '';
display: block;
${size('0.857142857em', '0.857142857em')}
background-color: ${props => props.color};
border-radius: 50%;
position: absolute;
left: 0;
top: 50%;
transform: translateY(-50%);
}
`;
const FullWidthRangeSlider = styled(RangeSlider)`
width: 100%;
`;
const typeMap = {
[TimeType.WallTime]: 'wallTimes',
[TimeType.Relative]: 'relatives',
[TimeType.Step]: 'steps'
} as const;
const formatter = {
[TimeType.WallTime]: (wallTime: number, {i18n}: ReturnType<typeof useTranslation>) =>
formatTime(wallTime, i18n.language),
[TimeType.Relative]: (relative: number) => `${relativeFormatter(relative)} ms`,
[TimeType.Step]: (step: number, {t}: ReturnType<typeof useTranslation>) => `${t('common:time-mode.step')} ${step}`
} as const;
type StepSliderProps = {
run: Run;
type: TimeType;
onChange?: (step: number) => unknown;
};
const StepSlider: FunctionComponent<StepSliderProps> = ({onChange, run, type}) => {
const translation = useTranslation('common');
const [index, setIndex] = useState(run.index);
useEffect(() => setIndex(run.index), [run.index]);
return (
<Field
label={
<Label color={run.colors[0]} title={run.label}>
{run.label}
</Label>
}
>
<TimeDisplay>
{run[typeMap[type]][index] == null ? '...' : formatter[type](run[typeMap[type]][index], translation)}
</TimeDisplay>
<FullWidthRangeSlider
min={0}
max={run.steps.length ? run.steps.length - 1 : 0}
step={1}
value={index}
onChange={setIndex}
onChangeComplete={() => onChange?.(index)}
/>
</Field>
);
};
export default StepSlider;
......@@ -18,6 +18,7 @@ const StyledAside = styled(Aside)`
overflow-y: auto;
display: flex;
flex-direction: column;
margin-bottom: 0;
.run-select {
flex: auto;
......
import LineChart, {LineChartRef} from '~/components/LineChart';
import {
Dataset,
Range,
ScalarDataset,
SortingMethod,
......@@ -14,21 +14,26 @@ import {
transform,
xAxisMap
} from '~/resource/scalars';
import LineChart, {LineChartRef, XAxisType, YAxisType} from '~/components/LineChart';
import React, {FunctionComponent, useCallback, useMemo, useRef, useState} from 'react';
import {rem, size} from '~/utils/style';
import ChartToolbox from '~/components/ChartToolbox';
import {EChartOption} from 'echarts';
import {Run} from '~/types';
import TooltipTable from '~/components/TooltipTable';
import {cycleFetcher} from '~/utils/fetch';
import ee from '~/utils/event';
import {format} from 'd3-format';
import queryString from 'query-string';
import {renderToStaticMarkup} from 'react-dom/server';
import styled from 'styled-components';
import useHeavyWork from '~/hooks/useHeavyWork';
import {useRunningRequest} from '~/hooks/useRequest';
import {useTranslation} from '~/utils/i18n';
const labelFormatter = format('.8');
const smoothWasm = () =>
import('@visualdl/wasm').then(({scalar_transform}): typeof transform => params =>
scalar_transform(params.datasets, params.smoothing)
......@@ -47,14 +52,6 @@ const Wrapper = styled.div`
flex-direction: column;
align-items: stretch;
justify-content: space-between;
.echarts td.run .run-indicator {
${size(12, 12)}
display: inline-block;
border-radius: 6px;
vertical-align: middle;
margin-right: 5px;
}
`;
const StyledLineChart = styled(LineChart)`
......@@ -74,17 +71,6 @@ const Error = styled.div`
align-items: center;
`;
enum XAxisType {
value = 'value',
log = 'log',
time = 'time'
}
enum YAxisType {
value = 'value',
log = 'log'
}
type ScalarChartProps = {
cid: symbol;
runs: Run[];
......@@ -94,7 +80,6 @@ type ScalarChartProps = {
sortingMethod: SortingMethod;
outlier?: boolean;
running?: boolean;
onToggleMaximized?: (maximized: boolean) => void;
};
const ScalarChart: FunctionComponent<ScalarChartProps> = ({
......@@ -123,7 +108,7 @@ const ScalarChart: FunctionComponent<ScalarChartProps> = ({
setMaximized(m => !m);
}, [cid, maximized]);
const xAxisType = useMemo(() => (xAxis === 'wall' ? XAxisType.time : XAxisType.value), [xAxis]);
const xAxisType = useMemo(() => (xAxis === XAxis.WallTime ? XAxisType.time : XAxisType.value), [xAxis]);
const [yAxisType, setYAxisType] = useState<YAxisType>(YAxisType.value);
const toggleYAxisType = useCallback(() => {
......@@ -179,13 +164,20 @@ const ScalarChart: FunctionComponent<ScalarChartProps> = ({
const formatter = useCallback(
(params: EChartOption.Tooltip.Format | EChartOption.Tooltip.Format[]) => {
const data = Array.isArray(params) ? params[0].data : params.data;
const step = data[1];
const points = nearestPoint(smoothedDatasets ?? [], runs, step);
const series: Dataset[number] = Array.isArray(params) ? params[0].data : params.data;
const points = nearestPoint(smoothedDatasets ?? [], runs, series[1]);
const sort = sortingMethodMap[sortingMethod];
return tooltip(sort ? sort(points, data) : points, maxStepLength, i18n);
const sorted = sort(points, series);
const {columns, data} = tooltip(
sorted.map(i => i.item),
maxStepLength,
i18n
);
return renderToStaticMarkup(
<TooltipTable run={t('common:runs')} runs={sorted.map(i => i.run)} columns={columns} data={data} />
);
},
[smoothedDatasets, runs, sortingMethod, maxStepLength, i18n]
[smoothedDatasets, runs, sortingMethod, maxStepLength, t, i18n]
);
const options = useMemo(
......@@ -201,7 +193,9 @@ const ScalarChart: FunctionComponent<ScalarChartProps> = ({
axisPointer: {
label: {
formatter:
xAxisType === XAxisType.time ? undefined : ({value}: {value: number}) => format('.8')(value)
xAxisType === XAxisType.time
? undefined
: ({value}: {value: number}) => labelFormatter(value)
}
}
},
......
import React, {FunctionComponent, useCallback, useEffect, useState} from 'react';
import RadioButton from '~/components/RadioButton';
import RadioGroup from '~/components/RadioGroup';
import {TimeMode} from '~/types';
import {useTranslation} from '~/utils/i18n';
const timeModes = [TimeMode.Step, TimeMode.Relative, TimeMode.WallTime] as const;
type TimeModeSelectProps = {
value: TimeMode;
onChange?: (value: TimeMode) => unknown;
};
const TimeModeSelect: FunctionComponent<TimeModeSelectProps> = ({value, onChange}) => {
const {t} = useTranslation('common');
const [timeMode, setTimeMode] = useState(value);
useEffect(() => setTimeMode(value), [value]);
const change = useCallback(
(v: TimeMode) => {
setTimeMode(v);
onChange?.(v);
},
[onChange]
);
return (
<RadioGroup value={timeMode} onChange={change}>
{timeModes.map(value => (
<RadioButton key={value} value={value}>
{t(`common:time-mode.${value}`)}
</RadioButton>
))}
</RadioGroup>
);
};
export default TimeModeSelect;
import React, {FunctionComponent} from 'react';
import {rem, size} from '~/utils/style';
import {Run} from '~/types';
import styled from 'styled-components';
const Wrapper = styled.div`
table {
border-spacing: none;
text-align: left;
table-layout: fixed;
font-size: ${rem(12)};
th,
td {
margin: 0;
> span {
display: inline-block;
}
}
th {
font-size: 1.166666667em;
font-weight: bold;
padding: 0 0.285714286em;
&.run > span {
min-width: 4.285714286em;
max-width: 12.857142857em;
}
}
td {
padding: 0 0.333333333em;
&.run-indicator > span {
${size(12, 12)}
border-radius: 6px;
vertical-align: middle;
background-color: currentColor;
}
}
}
`;
type TooltipTableProps = {
run: string;
runs: Run[];
columns: {
label: string;
width?: string;
}[];
data?: (string | number)[][];
};
const TooltipTable: FunctionComponent<TooltipTableProps> = ({run, runs, columns, data}) => {
// CANNOT use translation here
// because we use `ReactDOMServer.renderToStaticMarkup` to render this component into echarts tooltip
// `ReactDOMServer.renderToStaticMarkup` WILL NOT call hydrate so translation will never be initialized
// const {t} = useTranslation('common');
return (
<Wrapper>
<table>
<thead>
<tr>
<th className="run-indicator"></th>
<th className="run">{run}</th>
{columns.map((column, i) => (
<th key={i}>
<span style={{width: column.width ?? 'auto'}}>{column.label}</span>
</th>
))}
</tr>
</thead>
<tbody>
{data?.map((row, j) => (
<tr key={j}>
<td className="run-indicator">
<span style={{color: runs[j]?.colors[0]}}></span>
</td>
<td className="run">
<span>{runs[j]?.label}</span>
</td>
{row.map((cell, k) => (
<td key={k}>
<span>{cell}</span>
</td>
))}
</tr>
))}
</tbody>
</table>
</Wrapper>
);
};
export default TooltipTable;
......@@ -5,17 +5,35 @@ import {fetcher} from '~/utils/fetch';
import intersection from 'lodash/intersection';
import useRequest from '~/hooks/useRequest';
const allNavItems = ['scalars', 'histogram', 'samples', 'graphs', 'high-dimensional'];
enum Pages {
Scalars = 'scalars',
Histogram = 'histogram',
Samples = 'samples',
Graphs = 'graphs',
HighDimensional = 'high-dimensional',
PRCurve = 'pr-curve'
}
const pages = [
Pages.Scalars,
Pages.Histogram,
Pages.Samples,
Pages.Graphs,
Pages.HighDimensional,
Pages.PRCurve
] as const;
export const navMap = {
scalar: 'scalars',
histogram: 'histogram',
image: 'samples',
graph: 'graphs',
embeddings: 'high-dimensional'
scalar: Pages.Scalars,
histogram: Pages.Histogram,
image: Pages.Samples,
graph: Pages.Graphs,
embeddings: Pages.HighDimensional,
'pr-curve': Pages.PRCurve
} as const;
const useNavItems = () => {
const [components, setComponents] = useState<string[]>([]);
const [components, setComponents] = useState<Pages[]>([]);
const {data, mutate} = useRequest<(keyof typeof navMap)[]>('/components', fetcher, {
refreshInterval: components.length ? 61 * 1000 : 15 * 1000,
......@@ -36,7 +54,7 @@ const useNavItems = () => {
}, [mutate]);
useEffect(() => {
setComponents(intersection(allNavItems, data?.map(component => navMap[component]) ?? []));
setComponents(intersection(pages, data?.map(component => navMap[component]) ?? []));
}, [data]);
return components;
......
......@@ -32,7 +32,7 @@
"test": "echo \"Error: no test specified\" && exit 0"
},
"dependencies": {
"@tippyjs/react": "4.0.4",
"@tippyjs/react": "4.0.5",
"@visualdl/i18n": "2.0.0-beta.43",
"@visualdl/netron": "2.0.0-beta.43",
"@visualdl/wasm": "2.0.0-beta.43",
......@@ -65,13 +65,13 @@
"devDependencies": {
"@babel/core": "7.10.3",
"@types/d3-format": "1.3.1",
"@types/echarts": "4.6.2",
"@types/echarts": "4.6.3",
"@types/file-saver": "2.0.1",
"@types/lodash": "4.14.156",
"@types/lodash": "4.14.157",
"@types/mime-types": "2.1.0",
"@types/node": "14.0.13",
"@types/node": "14.0.14",
"@types/nprogress": "0.2.0",
"@types/react": "16.9.38",
"@types/react": "16.9.41",
"@types/react-dom": "16.9.8",
"@types/styled-components": "5.1.0",
"@visualdl/mock": "2.0.0-beta.43",
......
import ChartPage, {WithChart} from '~/components/ChartPage';
import {NextI18NextPage, useTranslation} from '~/utils/i18n';
import React, {useCallback, useEffect, useMemo, useState} from 'react';
import {Run, StepInfo, Tag, TimeType} from '~/resource/pr-curve';
import {borderColor, rem} from '~/utils/style';
import {AsideSection} from '~/components/Aside';
import Content from '~/components/Content';
import Error from '~/components/Error';
import Field from '~/components/Field';
import PRCurveChart from '~/components/PRCurvePage/PRCurveChart';
import Preloader from '~/components/Preloader';
import RunAside from '~/components/RunAside';
import StepSlider from '~/components/PRCurvePage/StepSlider';
import TimeModeSelect from '~/components/TimeModeSelect';
import Title from '~/components/Title';
import {cycleFetcher} from '~/utils/fetch';
import queryString from 'query-string';
import styled from 'styled-components';
import {useRunningRequest} from '~/hooks/useRequest';
import useTagFilter from '~/hooks/useTagFilter';
const StepSliderWrapper = styled.div`
max-height: 30vh;
overflow: auto;
overflow-x: hidden;
overflow-y: auto;
> ${AsideSection}:last-child {
padding-bottom: ${rem(20)};
margin-bottom: 0;
}
+ .run-section {
border-top: 1px solid ${borderColor};
margin-top: 0;
padding-top: ${rem(20)};
}
`;
const PRCurve: NextI18NextPage = () => {
const {t} = useTranslation(['pr-curve', 'common']);
const [running, setRunning] = useState(true);
const {runs, tags, selectedRuns, onChangeRuns, loadingRuns, loadingTags} = useTagFilter('pr-curve', running);
const [indexes, setIndexes] = useState<Record<string, number>>({});
const onChangeIndexes = useCallback(
(run: string, index: number) =>
setIndexes(indexes => ({
...indexes,
[run]: index
})),
[]
);
useEffect(
() =>
setIndexes(indexes =>
selectedRuns.reduce<typeof indexes>((m, c) => {
if (indexes[c.label] != null) {
m[c.label] = indexes[c.label];
}
return m;
}, {})
),
[selectedRuns]
);
const {data: stepInfo} = useRunningRequest<StepInfo[]>(
selectedRuns.map(run => `/pr-curve/steps?${queryString.stringify({run: run.label})}`),
!!running,
(...urls) => cycleFetcher(urls)
);
const runWithInfo = useMemo<Run[]>(
() =>
selectedRuns.map((run, i) => ({
...run,
index: indexes[run.label] ?? (stepInfo?.[i].length ?? 1) - 1,
steps: stepInfo?.[i].map(j => j[1]) ?? [],
wallTimes: stepInfo?.[i].map(j => Math.floor(j[0] * 1000)) ?? [],
relatives: stepInfo?.[i].map(j => (j[0] - stepInfo[i][0][0]) * 1000) ?? []
})),
[selectedRuns, stepInfo, indexes]
);
const [timeType, setTimeType] = useState<TimeType>(TimeType.Step);
const prCurveTags = useMemo<Tag[]>(
() =>
tags.map(tag => ({
...tag,
runs: tag.runs.map(run => ({
...run,
index: 0,
steps: [] as Run['steps'],
wallTimes: [] as Run['wallTimes'],
relatives: [] as Run['relatives'],
...runWithInfo.find(r => r.label === run.label)
}))
})),
[tags, runWithInfo]
);
const aside = useMemo(
() =>
runs.length ? (
<RunAside
runs={runs}
selectedRuns={selectedRuns}
onChangeRuns={onChangeRuns}
running={running}
onToggleRunning={setRunning}
>
<AsideSection>
<Field label={t('pr-curve:time-display-type')}>
<TimeModeSelect value={timeType} onChange={setTimeType} />
</Field>
</AsideSection>
<StepSliderWrapper>
{runWithInfo.map(run => (
<AsideSection key={run.label}>
<StepSlider
run={run}
type={timeType}
onChange={index => onChangeIndexes(run.label, index)}
/>
</AsideSection>
))}
</StepSliderWrapper>
</RunAside>
) : null,
[t, onChangeRuns, running, runs, selectedRuns, timeType, runWithInfo, onChangeIndexes]
);
const withChart = useCallback<WithChart<Tag>>(
({label, runs, ...args}) => <PRCurveChart runs={runs} tag={label} {...args} running={running} />,
[running]
);
return (
<>
<Preloader url="/runs" />
<Preloader url="/scalars/tags" />
<Title>{t('common:pr-curve')}</Title>
<Content aside={aside} loading={loadingRuns}>
{!loadingRuns && !runs.length ? (
<Error />
) : (
<ChartPage items={prCurveTags} withChart={withChart} loading={loadingRuns || loadingTags} />
)}
</Content>
</>
);
};
PRCurve.getInitialProps = () => ({
namespacesRequired: ['pr-curve', 'common']
});
export default PRCurve;
import ChartPage, {WithChart} from '~/components/ChartPage';
import {NextI18NextPage, useTranslation} from '~/utils/i18n';
import React, {useCallback, useMemo, useState} from 'react';
import {SortingMethod, XAxis, sortingMethod as toolTipSortingValues, xAxis as xAxisValues} from '~/resource/scalars';
import {SortingMethod, XAxis, sortingMethod as toolTipSortingValues} from '~/resource/scalars';
import {AsideSection} from '~/components/Aside';
import Checkbox from '~/components/Checkbox';
......@@ -9,13 +9,12 @@ import Content from '~/components/Content';
import Error from '~/components/Error';
import Field from '~/components/Field';
import Preloader from '~/components/Preloader';
import RadioButton from '~/components/RadioButton';
import RadioGroup from '~/components/RadioGroup';
import RunAside from '~/components/RunAside';
import ScalarChart from '~/components/ScalarsPage/ScalarChart';
import Select from '~/components/Select';
import Slider from '~/components/Slider';
import {Tag} from '~/types';
import TimeModeSelect from '~/components/TimeModeSelect';
import Title from '~/components/Title';
import {rem} from '~/utils/style';
import styled from 'styled-components';
......@@ -42,7 +41,7 @@ const Scalars: NextI18NextPage = () => {
const [smoothing, setSmoothing] = useState(0.6);
const [xAxis, setXAxis] = useState<XAxis>(xAxisValues[0]);
const [xAxis, setXAxis] = useState<XAxis>(XAxis.Step);
const [tooltipSorting, setTooltipSorting] = useState<SortingMethod>(toolTipSortingValues[0]);
......@@ -81,13 +80,7 @@ const Scalars: NextI18NextPage = () => {
</AsideSection>
<AsideSection>
<Field label={t('scalars:x-axis')}>
<RadioGroup value={xAxis} onChange={setXAxis}>
{xAxisValues.map(value => (
<RadioButton key={value} value={value}>
{t(`scalars:x-axis-value.${value}`)}
</RadioButton>
))}
</RadioGroup>
<TimeModeSelect value={xAxis} onChange={setXAxis} />
</Field>
</AsideSection>
</RunAside>
......
......@@ -9,6 +9,7 @@
"histogram": "Histogram",
"loading": "Please wait while loading data",
"next-page": "Next Page",
"pr-curve": "PR-Curve",
"previous-page": "Prev Page",
"run": "Run",
"running": "Running",
......@@ -27,6 +28,11 @@
"stop": "Stop",
"stop-realtime-refresh": "Stop realtime refresh",
"stopped": "Stopped",
"time-mode": {
"relative": "Relative",
"step": "Step",
"wall": "Wall Time"
},
"total-page": "{{count}} page, jump to",
"total-page_plural": "{{count}} pages, jump to",
"unselected-empty": "Nothing selected. <1/>Please select display data from right side."
......
{
"false-negatives": "FN",
"false-positives": "FP",
"precision": "Precision",
"recall": "Recall",
"threshold": "Threshold",
"time-display-type": "Time Display Type",
"true-negatives": "TN",
"true-positives": "TP"
}
......@@ -15,10 +15,5 @@
"nearest": "Nearest"
},
"value": "Value",
"x-axis": "X-Axis",
"x-axis-value": {
"relative": "Relative",
"step": "Step",
"wall": "Wall Time"
}
"x-axis": "X-Axis"
}
......@@ -9,6 +9,7 @@
"histogram": "直方图",
"loading": "数据载入中,请稍等",
"next-page": "下一页",
"pr-curve": "PR曲线",
"previous-page": "上一页",
"run": "运行",
"running": "运行中",
......@@ -27,6 +28,11 @@
"stop": "停止",
"stop-realtime-refresh": "停止实时数据刷新",
"stopped": "已停止",
"time-mode": {
"relative": "Relative",
"step": "Step",
"wall": "Wall Time"
},
"total-page": "共 {{count}} 页,跳转至",
"total-page_plural": "共 {{count}} 页,跳转至",
"unselected-empty": "未选中任何数据<1/>请在右侧操作栏选择要展示的数据"
......
{
"false-negatives": "FN",
"false-positives": "FP",
"precision": "Precision",
"recall": "Recall",
"threshold": "Threshold",
"time-display-type": "时间显示类型",
"true-negatives": "TN",
"true-positives": "TP"
}
......@@ -15,10 +15,5 @@
"nearest": "最近"
},
"value": "Value",
"x-axis": "X轴",
"x-axis-value": {
"relative": "Relative",
"step": "Step",
"wall": "Wall Time"
}
"x-axis": "X轴"
}
export const options = {
legend: {
data: []
},
tooltip: {
position: ['10%', '100%']
},
xAxis: {
min: 0,
max: 1
},
yAxis: {
min: 0,
max: 1,
splitNumber: 5
}
};
export const nearestPoint = (data: number[][][], recall: number): number[][] => {
return data.map(series => {
let delta = Number.POSITIVE_INFINITY;
let index = 0;
for (let i = 0; i < series.length; i++) {
if (series[i][1] - recall < Number.EPSILON) {
return series[i];
}
if (Math.abs(series[i][1] - recall) < delta) {
delta = Math.abs(series[i][1] - recall);
index = i;
}
}
return series[index];
});
};
export * from './types';
export * from './chart';
export * from './data';
import {Run as BaseRun, Tag as BaseTag, TimeMode} from '~/types';
export {TimeMode as TimeType};
type Step = number;
type WallTime = number;
type Relative = number;
type Precision = number;
type Recall = number;
type TruePositives = number;
type FalsePositives = number;
type TrueNegatives = number;
type FalseNegatives = number;
type Thresholds = number;
export type PRCurveDataItem = [
WallTime,
Step,
Precision[],
Recall[],
TruePositives[],
FalsePositives[],
TrueNegatives[],
FalseNegatives[],
Thresholds[]
];
export type PRCurveData = PRCurveDataItem[];
export interface Run extends BaseRun {
index: number;
steps: Step[];
wallTimes: WallTime[];
relatives: Relative[];
}
export type Tag = BaseTag<Run>;
export type StepInfo = [WallTime, Step][];
import {Dataset, TooltipData, XAxis} from './types';
import {Dataset, XAxis} from './types';
import {I18n} from '@visualdl/i18n';
import {Run} from '~/types';
......@@ -64,87 +64,36 @@ export const chartData = ({data, runs, xAxis}: {data: Dataset[]; runs: Run[]; xA
})
.flat();
// TODO: make it better, don't concat html
export const tooltip = (data: TooltipData[], stepLength: number, i18n: I18n) => {
const indexPropMap = {
time: 0,
step: 1,
value: 2,
smoothed: 3,
relative: 4
} as const;
const widthPropMap: Record<string, number | readonly [number, number]> = {
run: [60, 180],
time: 150,
step: Math.max(stepLength * 8, 40),
value: 60,
smoothed: 70,
relative: 60
} as const;
const translatePropMap = {
run: 'common:runs',
time: 'scalars:x-axis-value.wall',
step: 'scalars:x-axis-value.step',
value: 'scalars:value',
smoothed: 'scalars:smoothed',
relative: 'scalars:x-axis-value.relative'
} as const;
const transformedData = data.map(item => {
const data = item.item;
export const tooltip = (data: Dataset, stepLength: number, i18n: I18n) => {
return {
run: item.run,
smoothed: valueFormatter(data[indexPropMap.smoothed] ?? Number.NaN),
value: valueFormatter(data[indexPropMap.value] ?? Number.NaN),
step: data[indexPropMap.step],
time: formatTime(data[indexPropMap.time], i18n.language),
// Relative display value should take easy-read into consideration.
// Better to tranform data to 'day:hour', 'hour:minutes', 'minute: seconds' and second only.
relative: Math.floor(data[indexPropMap.relative] * 60 * 60) + 's'
} as const;
});
const renderContent = (content: string, width: number | readonly [number, number]) =>
`<div style="overflow: hidden; ${
Array.isArray(width)
? `min-width:${(width as [number, number])[0]};max-width:${(width as [number, number])[1]};`
: `width:${width as number}px;`
}">${content}</div>`;
let headerHtml = '<tr style="font-size:14px;">';
headerHtml += (Object.keys(transformedData[0]) as (keyof typeof transformedData[0])[])
.map(key => {
return `<th style="padding: 0 4px; font-weight: bold;" class="${key}">${renderContent(
i18n.t(translatePropMap[key]),
widthPropMap[key]
)}</th>`;
})
.join('');
headerHtml += '</tr>';
const content = transformedData
.map(item => {
let str = '<tr style="font-size:12px;">';
str += Object.keys(item)
.map(key => {
let content = '';
if (key === 'run') {
content += `<span class="run-indicator" style="background-color:${
item[key].colors?.[0] ?? 'transpanent'
}"></span>`;
content += `<span title="${item[key].label}">${item[key].label}</span>`;
} else {
content += item[key as keyof typeof item];
columns: [
{
label: i18n.t('scalars:smoothed'),
width: '5em'
},
{
label: i18n.t('scalars:value'),
width: '4.285714286em'
},
{
label: i18n.t('common:time-mode.step'),
width: `${Math.max(stepLength * 0.571428571, 2.857142857)}em`
},
{
label: i18n.t('common:time-mode.wall'),
width: '10.714285714em'
},
{
label: i18n.t('common:time-mode.relative'),
width: '4.285714286em'
}
return `<td style="padding: 0 4px;" class="${key}">${renderContent(
content,
widthPropMap[key as keyof typeof item]
)}</td>`;
})
.join('');
str += '</tr>';
return str;
})
.join('');
return `<table style="text-align: left;table-layout: fixed;"><thead>${headerHtml}</thead><tbody>${content}</tbody><table>`;
],
data: data.map(([time, step, value, smoothed, relative]) => [
valueFormatter(smoothed ?? Number.NaN),
valueFormatter(value ?? Number.NaN),
step,
formatTime(time, i18n.language),
Math.floor(relative * 60 * 60) + 's'
])
};
};
......@@ -103,6 +103,6 @@ export const nearestPoint = (data: Dataset[], runs: Run[], step: number) =>
}
return {
run: runs[index],
item: nearestItem || []
item: nearestItem || [0, 0, 0, 0, 0]
};
});
import {TooltipData} from './types';
import {SortingMethod as SM, TooltipData, XAxis} from './types';
import sortBy from 'lodash/sortBy';
export const xAxis = ['step', 'relative', 'wall'] as const;
export const xAxisMap = {
step: 1,
relative: 4,
wall: 0
[XAxis.Step]: 1,
[XAxis.Relative]: 4,
[XAxis.WallTime]: 0
} as const;
export const sortingMethod = ['default', 'descending', 'ascending', 'nearest'] as const;
export const sortingMethodMap = {
default: null,
descending: (points: TooltipData[]) => sortBy(points, point => point.item[3]).reverse(),
ascending: (points: TooltipData[]) => sortBy(points, point => point.item[3]),
export const sortingMethod = [SM.Default, SM.Descending, SM.Ascending, SM.Nearest] as const;
export const sortingMethodMap: Record<SM, (points: TooltipData[], data: number[]) => TooltipData[]> = {
[SM.Default]: (points: TooltipData[]) => points,
[SM.Descending]: (points: TooltipData[]) => sortBy(points, point => point.item[3]).reverse(),
[SM.Ascending]: (points: TooltipData[]) => sortBy(points, point => point.item[3]),
// Compare other ponts width the trigger point, caculate the nearest sort.
nearest: (points: TooltipData[], data: number[]) => sortBy(points, point => point.item[3] - data[2])
[SM.Nearest]: (points: TooltipData[], data: number[]) => sortBy(points, point => point.item[3] - data[2])
} as const;
export * from './types';
......
import {sortingMethodMap, xAxisMap} from './index';
import {Run} from '~/types';
import {Run, TimeMode} from '~/types';
type Value = number;
type WallTime = number;
......@@ -11,8 +9,13 @@ type Relative = number;
export type Dataset = [WallTime, Step, Value, Smoothed, Relative][];
export type ScalarDataset = [WallTime, Step, Value][];
export type XAxis = keyof typeof xAxisMap;
export type SortingMethod = keyof typeof sortingMethodMap;
export {TimeMode as XAxis};
export enum SortingMethod {
Default = 'default',
Descending = 'descending',
Ascending = 'ascending',
Nearest = 'nearest'
}
export type Range = {
min: number;
......@@ -21,5 +24,5 @@ export type Range = {
export type TooltipData = {
run: Run;
item: number[];
item: Dataset[number];
};
......@@ -3,8 +3,8 @@ export interface Run {
colors: [string, string];
}
export interface Tag {
runs: Run[];
export interface Tag<R = Run> {
runs: R[];
label: string;
}
......@@ -12,3 +12,9 @@ export interface TagWithSingleRun {
label: string;
run: Run;
}
export enum TimeMode {
Step = 'step',
Relative = 'relative',
WallTime = 'wall'
}
......@@ -50,8 +50,8 @@
"devDependencies": {
"@types/express": "4.17.6",
"@types/hoist-non-react-statics": "3.3.1",
"@types/node": "14.0.13",
"@types/react": "16.9.38",
"@types/node": "14.0.14",
"@types/react": "16.9.41",
"@types/react-dom": "16.9.8",
"typescript": "3.9.5"
},
......
export default ['embeddings', 'scalar', 'image', 'graph', 'histogram'];
export default ['embeddings', 'scalar', 'image', 'graph', 'histogram', 'pr-curve'];
import {Request} from 'express';
export default (request: Request) => {
if (request.query.run === 'train') {
return [
[
1593069993.786464,
0,
[
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3348623812198639,
0.35121950507164,
0.3604061007499695,
0.3729729652404785,
0.3720930218696594,
0.3899371027946472,
0.3986486494541168,
0.40740740299224854,
0.4065040647983551,
0.43396225571632385,
0.47252747416496277,
0.47058823704719543,
0.5066666603088379,
0.48571428656578064,
0.5,
0.5319148898124695,
0.5121951103210449,
0.5555555820465088,
0.692307710647583,
0.739130437374115,
0.761904776096344,
0.8125,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1
],
[
1,
1,
1,
1,
1,
1,
1,
0.9866666793823242,
0.9733333587646484,
0.9599999785423279,
0.9466666579246521,
0.9200000166893005,
0.8533333539962769,
0.8266666531562805,
0.7866666913032532,
0.7333333492279053,
0.6666666865348816,
0.6133333444595337,
0.5733333230018616,
0.5333333611488342,
0.5066666603088379,
0.4533333480358124,
0.41333332657814026,
0.3333333432674408,
0.2800000011920929,
0.2666666805744171,
0.23999999463558197,
0.2266666740179062,
0.2133333384990692,
0.1733333319425583,
0.1599999964237213,
0.13333334028720856,
0.1066666692495346,
0.09333333373069763,
0.07999999821186066,
0.07999999821186066,
0.07999999821186066,
0.06666667014360428,
0.0533333346247673,
0.02666666731238365,
0.013333333656191826
],
[
75,
75,
75,
75,
75,
75,
75,
74,
73,
72,
71,
69,
64,
62,
59,
55,
50,
46,
43,
40,
38,
34,
31,
25,
21,
20,
18,
17,
16,
13,
12,
10,
8,
7,
6,
6,
6,
5,
4,
2,
1
],
[
150,
150,
150,
150,
150,
150,
150,
148,
145,
133,
126,
116,
108,
97,
89,
80,
73,
60,
48,
45,
37,
36,
31,
22,
20,
16,
8,
6,
5,
3,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0
],
[
0,
0,
0,
0,
0,
0,
0,
2,
5,
17,
24,
34,
42,
53,
61,
70,
77,
90,
102,
105,
113,
114,
119,
128,
130,
134,
142,
144,
145,
147,
150,
150,
150,
150,
150,
150,
150,
150,
150,
150,
150
],
[
0,
0,
0,
0,
0,
0,
0,
1,
2,
3,
4,
6,
11,
13,
16,
20,
25,
29,
32,
35,
37,
41,
44,
50,
54,
55,
57,
58,
59,
62,
63,
65,
67,
68,
69,
69,
69,
70,
71,
73,
74
],
[
0.02,
0.04,
0.06,
0.08,
0.1,
0.12,
0.14,
0.16,
0.18,
0.2,
0.22,
0.24,
0.26,
0.28,
0.3,
0.32,
0.34,
0.36,
0.38,
0.4,
0.42,
0.44,
0.46,
0.48,
0.5,
0.52,
0.54,
0.56,
0.58,
0.6,
0.62,
0.64,
0.66,
0.68,
0.7,
0.72,
0.74,
0.76,
0.78,
0.8,
0.82
]
],
[
1593069993.787353,
1,
[
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3348214328289032,
0.3333333432674408,
0.3509615361690521,
0.36000001430511475,
0.3776595890522003,
0.395480215549469,
0.386904776096344,
0.40816327929496765,
0.42335766553878784,
0.4193548262119293,
0.4285714328289032,
0.43119266629219055,
0.4536082446575165,
0.46666666865348816,
0.4749999940395355,
0.4864864945411682,
0.46875,
0.4912280738353729,
0.52173912525177,
0.4871794879436493,
0.5,
0.4482758641242981,
0.4399999976158142,
0.40909090638160706,
0.4117647111415863,
0.4375,
0.4166666567325592,
0.5555555820465088,
0.5,
0.5,
0.25,
0.5,
0.5,
0.5,
0,
0,
0
],
[
1,
1,
1,
1,
1,
1,
1,
0.9733333587646484,
0.9733333587646484,
0.9599999785423279,
0.9466666579246521,
0.9333333373069763,
0.8666666746139526,
0.800000011920929,
0.7733333110809326,
0.6933333277702332,
0.6399999856948853,
0.6266666650772095,
0.5866666436195374,
0.5600000023841858,
0.5066666603088379,
0.47999998927116394,
0.4000000059604645,
0.3733333349227905,
0.3199999928474426,
0.25333333015441895,
0.23999999463558197,
0.1733333319425583,
0.14666666090488434,
0.11999999731779099,
0.09333333373069763,
0.09333333373069763,
0.06666667014360428,
0.06666667014360428,
0.0533333346247673,
0.03999999910593033,
0.013333333656191826,
0.013333333656191826,
0.013333333656191826,
0.013333333656191826,
0,
0,
0
],
[
75,
75,
75,
75,
75,
75,
75,
73,
73,
72,
71,
70,
65,
60,
58,
52,
48,
47,
44,
42,
38,
36,
30,
28,
24,
19,
18,
13,
11,
9,
7,
7,
5,
5,
4,
3,
1,
1,
1,
1,
0,
0,
0
],
[
150,
150,
150,
150,
150,
150,
149,
146,
135,
128,
117,
107,
103,
87,
79,
72,
64,
62,
53,
48,
42,
38,
34,
29,
22,
20,
18,
16,
14,
13,
10,
9,
7,
4,
4,
3,
3,
1,
1,
1,
1,
1,
1
],
[
0,
0,
0,
0,
0,
0,
1,
4,
15,
22,
33,
43,
47,
63,
71,
78,
86,
88,
97,
102,
108,
112,
116,
121,
128,
130,
132,
134,
136,
137,
140,
141,
143,
146,
146,
147,
147,
149,
149,
149,
149,
149,
149
],
[
0,
0,
0,
0,
0,
0,
0,
2,
2,
3,
4,
5,
10,
15,
17,
23,
27,
28,
31,
33,
37,
39,
45,
47,
51,
56,
57,
62,
64,
66,
68,
68,
70,
70,
71,
72,
74,
74,
74,
74,
75,
75,
75
],
[
0.02,
0.04,
0.06,
0.08,
0.1,
0.12,
0.14,
0.16,
0.18,
0.2,
0.22,
0.24,
0.26,
0.28,
0.3,
0.32,
0.34,
0.36,
0.38,
0.4,
0.42,
0.44,
0.46,
0.48,
0.5,
0.52,
0.54,
0.56,
0.58,
0.6,
0.62,
0.64,
0.66,
0.68,
0.7,
0.72,
0.74,
0.76,
0.78,
0.8,
0.82,
0.84,
0.86
]
],
[
1593069993.7881448,
2,
[
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3348214328289032,
0.33181819319725037,
0.33796295523643494,
0.34272301197052,
0.3497537076473236,
0.3526315689086914,
0.36781609058380127,
0.3836477994918823,
0.3959731459617615,
0.3893129825592041,
0.3613445460796356,
0.37383177876472473,
0.3814432919025421,
0.42352941632270813,
0.43661972880363464,
0.4029850661754608,
0.4166666567325592,
0.4038461446762085,
0.41304346919059753,
0.4749999940395355,
0.4571428596973419,
0.4137931168079376,
0.3913043439388275,
0.44999998807907104,
0.47058823704719543,
0.5,
0.5384615659713745,
0.7777777910232544,
0.8571428656578064,
0.800000011920929,
0.75,
0.75,
0.6666666865348816,
0.5,
0,
0
],
[
1,
1,
1,
1,
1,
1,
0.9733333587646484,
0.9733333587646484,
0.9733333587646484,
0.9466666579246521,
0.8933333158493042,
0.8533333539962769,
0.8133333325386047,
0.7866666913032532,
0.6800000071525574,
0.5733333230018616,
0.5333333611488342,
0.4933333396911621,
0.47999998927116394,
0.41333332657814026,
0.36000001430511475,
0.3333333432674408,
0.2800000011920929,
0.25333333015441895,
0.25333333015441895,
0.2133333384990692,
0.1599999964237213,
0.11999999731779099,
0.11999999731779099,
0.1066666692495346,
0.09333333373069763,
0.09333333373069763,
0.09333333373069763,
0.07999999821186066,
0.0533333346247673,
0.03999999910593033,
0.03999999910593033,
0.02666666731238365,
0.013333333656191826,
0,
0
],
[
75,
75,
75,
75,
75,
75,
73,
73,
73,
71,
67,
64,
61,
59,
51,
43,
40,
37,
36,
31,
27,
25,
21,
19,
19,
16,
12,
9,
9,
8,
7,
7,
7,
6,
4,
3,
3,
2,
1,
0,
0
],
[
150,
150,
150,
150,
150,
149,
147,
143,
140,
132,
123,
110,
98,
90,
80,
76,
67,
60,
49,
40,
40,
35,
31,
27,
21,
19,
17,
14,
11,
9,
7,
6,
2,
1,
1,
1,
1,
1,
1,
1,
1
],
[
0,
0,
0,
0,
0,
1,
3,
7,
10,
18,
27,
40,
52,
60,
70,
74,
83,
90,
101,
110,
110,
115,
119,
123,
129,
131,
133,
136,
139,
141,
143,
144,
148,
149,
149,
149,
149,
149,
149,
149,
149
],
[
0,
0,
0,
0,
0,
0,
2,
2,
2,
4,
8,
11,
14,
16,
24,
32,
35,
38,
39,
44,
48,
50,
54,
56,
56,
59,
63,
66,
66,
67,
68,
68,
68,
69,
71,
72,
72,
73,
74,
75,
75
],
[
0.02,
0.04,
0.06,
0.08,
0.1,
0.12,
0.14,
0.16,
0.18,
0.2,
0.22,
0.24,
0.26,
0.28,
0.3,
0.32,
0.34,
0.36,
0.38,
0.4,
0.42,
0.44,
0.46,
0.48,
0.5,
0.52,
0.54,
0.56,
0.58,
0.6,
0.62,
0.64,
0.66,
0.68,
0.7,
0.72,
0.74,
0.76,
0.78,
0.8,
0.82
]
],
[
1593069993.788836,
3,
[
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3303571343421936,
0.32407405972480774,
0.32380953431129456,
0.3350253701210022,
0.34224599599838257,
0.36627906560897827,
0.3459119498729706,
0.36986300349235535,
0.375,
0.3739837408065796,
0.38532111048698425,
0.4040403962135315,
0.42696627974510193,
0.45121949911117554,
0.47826087474823,
0.49152541160583496,
0.49056604504585266,
0.4897959232330322,
0.4651162922382355,
0.4749999940395355,
0.5,
0.48275861144065857,
0.5,
0.4761904776096344,
0.5,
0.47058823704719543,
0.5714285969734192,
0.5454545617103577,
0.5555555820465088,
0.5,
0.5714285969734192,
0.5714285969734192,
0.25,
0.3333333432674408,
0,
0,
0,
0,
0
],
[
1,
1,
1,
1,
1,
1,
0.9866666793823242,
0.9333333373069763,
0.9066666960716248,
0.8799999952316284,
0.8533333539962769,
0.8399999737739563,
0.7333333492279053,
0.7200000286102295,
0.6800000071525574,
0.6133333444595337,
0.5600000023841858,
0.5333333611488342,
0.5066666603088379,
0.4933333396911621,
0.4399999976158142,
0.3866666555404663,
0.3466666638851166,
0.3199999928474426,
0.2666666805744171,
0.25333333015441895,
0.23999999463558197,
0.18666666746139526,
0.14666666090488434,
0.13333334028720856,
0.13333334028720856,
0.1066666692495346,
0.1066666692495346,
0.07999999821186066,
0.06666667014360428,
0.0533333346247673,
0.0533333346247673,
0.0533333346247673,
0.013333333656191826,
0.013333333656191826,
0,
0,
0,
0,
0
],
[
75,
75,
75,
75,
75,
75,
74,
70,
68,
66,
64,
63,
55,
54,
51,
46,
42,
40,
38,
37,
33,
29,
26,
24,
20,
19,
18,
14,
11,
10,
10,
8,
8,
6,
5,
4,
4,
4,
1,
1,
0,
0,
0,
0,
0
],
[
150,
150,
150,
150,
150,
150,
150,
146,
142,
131,
123,
109,
104,
92,
85,
77,
67,
59,
51,
45,
36,
30,
27,
25,
23,
21,
18,
15,
11,
11,
10,
9,
6,
5,
4,
4,
3,
3,
3,
2,
2,
1,
1,
1,
1
],
[
0,
0,
0,
0,
0,
0,
0,
4,
8,
19,
27,
41,
46,
58,
65,
73,
83,
91,
99,
105,
114,
120,
123,
125,
127,
129,
132,
135,
139,
139,
140,
141,
144,
145,
146,
146,
147,
147,
147,
148,
148,
149,
149,
149,
149
],
[
0,
0,
0,
0,
0,
0,
1,
5,
7,
9,
11,
12,
20,
21,
24,
29,
33,
35,
37,
38,
42,
46,
49,
51,
55,
56,
57,
61,
64,
65,
65,
67,
67,
69,
70,
71,
71,
71,
74,
74,
75,
75,
75,
75,
75
],
[
0.02,
0.04,
0.06,
0.08,
0.1,
0.12,
0.14,
0.16,
0.18,
0.2,
0.22,
0.24,
0.26,
0.28,
0.3,
0.32,
0.34,
0.36,
0.38,
0.4,
0.42,
0.44,
0.46,
0.48,
0.5,
0.52,
0.54,
0.56,
0.58,
0.6,
0.62,
0.64,
0.66,
0.68,
0.7,
0.72,
0.74,
0.76,
0.78,
0.8,
0.82,
0.84,
0.86,
0.88,
0.9
]
],
[
1593069993.7894,
4,
[
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3348214328289032,
0.3363228738307953,
0.3317972421646118,
0.33816424012184143,
0.3484848439693451,
0.3492063581943512,
0.3636363744735718,
0.363095223903656,
0.3717948794364929,
0.37142857909202576,
0.3840000033378601,
0.3839285671710968,
0.3979591727256775,
0.4166666567325592,
0.4722222089767456,
0.460317462682724,
0.4912280738353729,
0.4901960790157318,
0.5333333611488342,
0.5641025900840759,
0.5882353186607361,
0.6666666865348816,
0.625,
0.5555555820465088,
0.5625,
0.6363636255264282,
0.6666666865348816,
0.6666666865348816,
0.5,
0.5,
0.5,
0.6666666865348816,
1,
1
],
[
1,
1,
1,
1,
1,
1,
1,
0.9599999785423279,
0.9333333373069763,
0.9200000166893005,
0.8799999952316284,
0.8533333539962769,
0.8133333325386047,
0.7733333110809326,
0.6933333277702332,
0.6399999856948853,
0.5733333230018616,
0.5199999809265137,
0.46666666865348816,
0.4533333480358124,
0.3866666555404663,
0.3733333349227905,
0.3333333432674408,
0.3199999928474426,
0.2933333218097687,
0.2666666805744171,
0.23999999463558197,
0.20000000298023224,
0.13333334028720856,
0.11999999731779099,
0.09333333373069763,
0.07999999821186066,
0.0533333346247673,
0.02666666731238365,
0.02666666731238365,
0.02666666731238365,
0.02666666731238365,
0.02666666731238365,
0.013333333656191826
],
[
75,
75,
75,
75,
75,
75,
75,
72,
70,
69,
66,
64,
61,
58,
52,
48,
43,
39,
35,
34,
29,
28,
25,
24,
22,
20,
18,
15,
10,
9,
7,
6,
4,
2,
2,
2,
2,
2,
1
],
[
150,
150,
150,
150,
150,
149,
148,
145,
137,
129,
123,
112,
107,
98,
88,
77,
69,
59,
49,
38,
34,
29,
26,
21,
17,
14,
9,
9,
8,
7,
4,
3,
2,
2,
2,
2,
1,
0,
0
],
[
0,
0,
0,
0,
0,
1,
2,
5,
13,
21,
27,
38,
43,
52,
62,
73,
81,
91,
101,
112,
116,
121,
124,
129,
133,
136,
141,
141,
142,
143,
146,
147,
148,
148,
148,
148,
149,
150,
150
],
[
0,
0,
0,
0,
0,
0,
0,
3,
5,
6,
9,
11,
14,
17,
23,
27,
32,
36,
40,
41,
46,
47,
50,
51,
53,
55,
57,
60,
65,
66,
68,
69,
71,
73,
73,
73,
73,
73,
74
],
[
0.02,
0.04,
0.06,
0.08,
0.1,
0.12,
0.14,
0.16,
0.18,
0.2,
0.22,
0.24,
0.26,
0.28,
0.3,
0.32,
0.34,
0.36,
0.38,
0.4,
0.42,
0.44,
0.46,
0.48,
0.5,
0.52,
0.54,
0.56,
0.58,
0.6,
0.62,
0.64,
0.66,
0.68,
0.7,
0.72,
0.74,
0.76,
0.78
]
],
[
1593069993.790076,
5,
[
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3348214328289032,
0.3378378450870514,
0.3410138189792633,
0.3507108986377716,
0.3631840944290161,
0.3617021143436432,
0.3604651093482971,
0.36250001192092896,
0.3758389353752136,
0.3834586441516876,
0.4000000059604645,
0.3980582654476166,
0.44186046719551086,
0.4430379867553711,
0.48571428656578064,
0.515625,
0.5892857313156128,
0.5490196347236633,
0.5714285969734192,
0.5641025900840759,
0.5588235259056091,
0.5862069129943848,
0.5652173757553101,
0.6000000238418579,
0.6666666865348816,
0.6470588445663452,
0.6875,
0.6666666865348816,
0.6666666865348816,
0.6666666865348816,
0.75,
0.7142857313156128,
0.5,
0.5,
0.5,
1
],
[
1,
1,
1,
1,
1,
1,
1,
0.9866666793823242,
0.9866666793823242,
0.9733333587646484,
0.9066666960716248,
0.8266666531562805,
0.7733333110809326,
0.746666669845581,
0.6800000071525574,
0.6133333444595337,
0.54666668176651,
0.5066666603088379,
0.46666666865348816,
0.4533333480358124,
0.4399999976158142,
0.4399999976158142,
0.3733333349227905,
0.3199999928474426,
0.2933333218097687,
0.25333333015441895,
0.2266666740179062,
0.1733333319425583,
0.1599999964237213,
0.1599999964237213,
0.14666666090488434,
0.14666666090488434,
0.13333334028720856,
0.1066666692495346,
0.1066666692495346,
0.07999999821186066,
0.06666667014360428,
0.02666666731238365,
0.02666666731238365,
0.013333333656191826,
0.013333333656191826
],
[
75,
75,
75,
75,
75,
75,
75,
74,
74,
73,
68,
62,
58,
56,
51,
46,
41,
38,
35,
34,
33,
33,
28,
24,
22,
19,
17,
13,
12,
12,
11,
11,
10,
8,
8,
6,
5,
2,
2,
1,
1
],
[
150,
150,
150,
150,
150,
149,
147,
143,
137,
128,
120,
110,
102,
93,
82,
69,
62,
48,
44,
36,
31,
23,
23,
18,
17,
15,
12,
10,
8,
6,
6,
5,
5,
4,
4,
2,
2,
2,
2,
1,
0
],
[
0,
0,
0,
0,
0,
1,
3,
7,
13,
22,
30,
40,
48,
57,
68,
81,
88,
102,
106,
114,
119,
127,
127,
132,
133,
135,
138,
140,
142,
144,
144,
145,
145,
146,
146,
148,
148,
148,
148,
149,
150
],
[
0,
0,
0,
0,
0,
0,
0,
1,
1,
2,
7,
13,
17,
19,
24,
29,
34,
37,
40,
41,
42,
42,
47,
51,
53,
56,
58,
62,
63,
63,
64,
64,
65,
67,
67,
69,
70,
73,
73,
74,
74
],
[
0.02,
0.04,
0.06,
0.08,
0.1,
0.12,
0.14,
0.16,
0.18,
0.2,
0.22,
0.24,
0.26,
0.28,
0.3,
0.32,
0.34,
0.36,
0.38,
0.4,
0.42,
0.44,
0.46,
0.48,
0.5,
0.52,
0.54,
0.56,
0.58,
0.6,
0.62,
0.64,
0.66,
0.68,
0.7,
0.72,
0.74,
0.76,
0.78,
0.8,
0.82
]
],
[
1593069993.790763,
6,
[
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.33636364340782166,
0.3396226465702057,
0.34299516677856445,
0.34825870394706726,
0.35638296604156494,
0.3641618490219116,
0.3836477994918823,
0.4041095972061157,
0.4148148000240326,
0.4406779706478119,
0.4615384638309479,
0.4285714328289032,
0.44871795177459717,
0.47826087474823,
0.4769230782985687,
0.4655172526836395,
0.4901960790157318,
0.54347825050354,
0.523809552192688,
0.5249999761581421,
0.6000000238418579,
0.5555555820465088,
0.5416666865348816,
0.5263158082962036,
0.47058823704719543,
0.3571428656578064,
0.4545454680919647,
0.6666666865348816,
0.6000000238418579,
0.5,
0.5,
0.6666666865348816,
0.6666666865348816,
0.6666666865348816,
1,
1,
1,
1,
1
],
[
1,
1,
1,
1,
1,
1,
0.9866666793823242,
0.9599999785423279,
0.9466666579246521,
0.9333333373069763,
0.8933333158493042,
0.8399999737739563,
0.8133333325386047,
0.7866666913032532,
0.746666669845581,
0.6933333277702332,
0.6399999856948853,
0.5199999809265137,
0.46666666865348816,
0.4399999976158142,
0.41333332657814026,
0.36000001430511475,
0.3333333432674408,
0.3333333432674408,
0.2933333218097687,
0.2800000011920929,
0.2800000011920929,
0.20000000298023224,
0.1733333319425583,
0.13333334028720856,
0.1066666692495346,
0.06666667014360428,
0.06666667014360428,
0.0533333346247673,
0.03999999910593033,
0.02666666731238365,
0.02666666731238365,
0.02666666731238365,
0.02666666731238365,
0.02666666731238365,
0.02666666731238365,
0.02666666731238365,
0.02666666731238365,
0.013333333656191826,
0.013333333656191826
],
[
75,
75,
75,
75,
75,
75,
74,
72,
71,
70,
67,
63,
61,
59,
56,
52,
48,
39,
35,
33,
31,
27,
25,
25,
22,
21,
21,
15,
13,
10,
8,
5,
5,
4,
3,
2,
2,
2,
2,
2,
2,
2,
2,
1,
1
],
[
150,
150,
150,
150,
150,
150,
146,
140,
136,
131,
121,
110,
98,
87,
79,
66,
56,
52,
43,
36,
34,
31,
26,
21,
20,
19,
14,
12,
11,
9,
9,
9,
6,
2,
2,
2,
2,
1,
1,
1,
0,
0,
0,
0,
0
],
[
0,
0,
0,
0,
0,
0,
4,
10,
14,
19,
29,
40,
52,
63,
71,
84,
94,
98,
107,
114,
116,
119,
124,
129,
130,
131,
136,
138,
139,
141,
141,
141,
144,
148,
148,
148,
148,
149,
149,
149,
150,
150,
150,
150,
150
],
[
0,
0,
0,
0,
0,
0,
1,
3,
4,
5,
8,
12,
14,
16,
19,
23,
27,
36,
40,
42,
44,
48,
50,
50,
53,
54,
54,
60,
62,
65,
67,
70,
70,
71,
72,
73,
73,
73,
73,
73,
73,
73,
73,
74,
74
],
[
0.02,
0.04,
0.06,
0.08,
0.1,
0.12,
0.14,
0.16,
0.18,
0.2,
0.22,
0.24,
0.26,
0.28,
0.3,
0.32,
0.34,
0.36,
0.38,
0.4,
0.42,
0.44,
0.46,
0.48,
0.5,
0.52,
0.54,
0.56,
0.58,
0.6,
0.62,
0.64,
0.66,
0.68,
0.7,
0.72,
0.74,
0.76,
0.78,
0.8,
0.82,
0.84,
0.86,
0.88,
0.9
]
],
[
1593069993.791473,
7,
[
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3348214328289032,
0.34246575832366943,
0.3461538553237915,
0.35567009449005127,
0.36021506786346436,
0.3735632300376892,
0.3827160596847534,
0.4054054021835327,
0.3955223858356476,
0.39830508828163147,
0.4134615361690521,
0.4204545319080353,
0.44871795177459717,
0.47887325286865234,
0.5,
0.5,
0.5,
0.5106382966041565,
0.5365853905677795,
0.5428571701049805,
0.5625,
0.5714285969734192,
0.5769230723381042,
0.5600000023841858,
0.5454545617103577,
0.5,
0.5,
0.5,
0.4285714328289032,
0.4545454680919647,
0.4000000059604645,
0.5,
0.4000000059604645,
0,
0,
0,
0,
0,
0
],
[
1,
1,
1,
1,
1,
1,
1,
0.9599999785423279,
0.9200000166893005,
0.8933333158493042,
0.8666666746139526,
0.8266666531562805,
0.800000011920929,
0.7066666483879089,
0.6266666650772095,
0.5733333230018616,
0.4933333396911621,
0.46666666865348816,
0.4533333480358124,
0.4266666769981384,
0.3733333349227905,
0.3466666638851166,
0.3199999928474426,
0.2933333218097687,
0.25333333015441895,
0.23999999463558197,
0.2133333384990692,
0.20000000298023224,
0.18666666746139526,
0.1599999964237213,
0.13333334028720856,
0.11999999731779099,
0.1066666692495346,
0.07999999821186066,
0.06666667014360428,
0.0533333346247673,
0.0533333346247673,
0.02666666731238365,
0,
0,
0,
0,
0,
0
],
[
75,
75,
75,
75,
75,
75,
75,
72,
69,
67,
65,
62,
60,
53,
47,
43,
37,
35,
34,
32,
28,
26,
24,
22,
19,
18,
16,
15,
14,
12,
10,
9,
8,
6,
5,
4,
4,
2,
0,
0,
0,
0,
0,
0
],
[
150,
150,
150,
150,
150,
149,
144,
136,
125,
119,
109,
100,
88,
81,
71,
61,
51,
43,
37,
32,
28,
26,
23,
19,
16,
14,
12,
11,
11,
10,
10,
9,
8,
8,
6,
6,
4,
3,
2,
2,
1,
1,
1,
1
],
[
0,
0,
0,
0,
0,
1,
6,
14,
25,
31,
41,
50,
62,
69,
79,
89,
99,
107,
113,
118,
122,
124,
127,
131,
134,
136,
138,
139,
139,
140,
140,
141,
142,
142,
144,
144,
146,
147,
148,
148,
149,
149,
149,
149
],
[
0,
0,
0,
0,
0,
0,
0,
3,
6,
8,
10,
13,
15,
22,
28,
32,
38,
40,
41,
43,
47,
49,
51,
53,
56,
57,
59,
60,
61,
63,
65,
66,
67,
69,
70,
71,
71,
73,
75,
75,
75,
75,
75,
75
],
[
0.02,
0.04,
0.06,
0.08,
0.1,
0.12,
0.14,
0.16,
0.18,
0.2,
0.22,
0.24,
0.26,
0.28,
0.3,
0.32,
0.34,
0.36,
0.38,
0.4,
0.42,
0.44,
0.46,
0.48,
0.5,
0.52,
0.54,
0.56,
0.58,
0.6,
0.62,
0.64,
0.66,
0.68,
0.7,
0.72,
0.74,
0.76,
0.78,
0.8,
0.82,
0.84,
0.86,
0.88
]
],
[
1593069993.792149,
8,
[
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3348214328289032,
0.3363228738307953,
0.3333333432674408,
0.3396226465702057,
0.3383084535598755,
0.33673468232154846,
0.3368983864784241,
0.3314606845378876,
0.33136093616485596,
0.3561643958091736,
0.3643410801887512,
0.39316239953041077,
0.43689319491386414,
0.450549453496933,
0.4938271641731262,
0.4861111044883728,
0.484375,
0.5370370149612427,
0.5333333611488342,
0.5,
0.5135135054588318,
0.529411792755127,
0.5806451439857483,
0.6296296119689941,
0.6499999761581421,
0.6111111044883728,
0.6666666865348816,
0.7692307829856873,
0.75,
0.800000011920929,
0.8333333134651184,
0.800000011920929,
0.800000011920929,
1,
1,
1,
1,
1,
1
],
[
1,
1,
1,
1,
1,
1,
0.9733333587646484,
0.9599999785423279,
0.9066666960716248,
0.8799999952316284,
0.8399999737739563,
0.7866666913032532,
0.746666669845581,
0.6933333277702332,
0.6266666650772095,
0.6133333444595337,
0.6000000238418579,
0.54666668176651,
0.5333333611488342,
0.46666666865348816,
0.41333332657814026,
0.3866666555404663,
0.3199999928474426,
0.25333333015441895,
0.25333333015441895,
0.23999999463558197,
0.23999999463558197,
0.2266666740179062,
0.1733333319425583,
0.14666666090488434,
0.13333334028720856,
0.13333334028720856,
0.11999999731779099,
0.1066666692495346,
0.06666667014360428,
0.0533333346247673,
0.0533333346247673,
0.0533333346247673,
0.03999999910593033,
0.03999999910593033,
0.03999999910593033,
0.013333333656191826,
0.013333333656191826
],
[
75,
75,
75,
75,
75,
75,
73,
72,
68,
66,
63,
59,
56,
52,
47,
46,
45,
41,
40,
35,
31,
29,
24,
19,
19,
18,
18,
17,
13,
11,
10,
10,
9,
8,
5,
4,
4,
4,
3,
3,
3,
1,
1
],
[
150,
150,
150,
150,
149,
148,
146,
140,
133,
130,
124,
119,
113,
94,
82,
71,
58,
50,
41,
37,
33,
25,
21,
19,
18,
16,
13,
10,
7,
7,
5,
3,
3,
2,
1,
1,
1,
0,
0,
0,
0,
0,
0
],
[
0,
0,
0,
0,
1,
2,
4,
10,
17,
20,
26,
31,
37,
56,
68,
79,
92,
100,
109,
113,
117,
125,
129,
131,
132,
134,
137,
140,
143,
143,
145,
147,
147,
148,
149,
149,
149,
150,
150,
150,
150,
150,
150
],
[
0,
0,
0,
0,
0,
0,
2,
3,
7,
9,
12,
16,
19,
23,
28,
29,
30,
34,
35,
40,
44,
46,
51,
56,
56,
57,
57,
58,
62,
64,
65,
65,
66,
67,
70,
71,
71,
71,
72,
72,
72,
74,
74
],
[
0.02,
0.04,
0.06,
0.08,
0.1,
0.12,
0.14,
0.16,
0.18,
0.2,
0.22,
0.24,
0.26,
0.28,
0.3,
0.32,
0.34,
0.36,
0.38,
0.4,
0.42,
0.44,
0.46,
0.48,
0.5,
0.52,
0.54,
0.56,
0.58,
0.6,
0.62,
0.64,
0.66,
0.68,
0.7,
0.72,
0.74,
0.76,
0.78,
0.8,
0.82,
0.84,
0.86
]
],
[
1593069993.792763,
9,
[
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3363228738307953,
0.3395348787307739,
0.3349282443523407,
0.3283582031726837,
0.32474225759506226,
0.34682080149650574,
0.3522012531757355,
0.3611111044883728,
0.36567163467407227,
0.3781512677669525,
0.37962964177131653,
0.3958333432674408,
0.42352941632270813,
0.4399999976158142,
0.4637681245803833,
0.4754098355770111,
0.46296295523643494,
0.47058823704719543,
0.4791666567325592,
0.5128205418586731,
0.5142857432365417,
0.5161290168762207,
0.5199999809265137,
0.6000000238418579,
0.5555555820465088,
0.6666666865348816,
0.7777777910232544,
0.8571428656578064,
0.8571428656578064,
0.8571428656578064,
0.8571428656578064,
0.8333333134651184,
0.8333333134651184,
0.6666666865348816,
0.6666666865348816,
0
],
[
1,
1,
1,
1,
1,
1,
0.9733333587646484,
0.9333333373069763,
0.8799999952316284,
0.8399999737739563,
0.800000011920929,
0.746666669845581,
0.6933333277702332,
0.653333306312561,
0.6000000238418579,
0.54666668176651,
0.5066666603088379,
0.47999998927116394,
0.4399999976158142,
0.4266666769981384,
0.3866666555404663,
0.3333333432674408,
0.3199999928474426,
0.30666667222976685,
0.2666666805744171,
0.23999999463558197,
0.2133333384990692,
0.1733333319425583,
0.1599999964237213,
0.13333334028720856,
0.13333334028720856,
0.09333333373069763,
0.07999999821186066,
0.07999999821186066,
0.07999999821186066,
0.07999999821186066,
0.06666667014360428,
0.06666667014360428,
0.02666666731238365,
0.02666666731238365,
0
],
[
75,
75,
75,
75,
75,
75,
73,
70,
66,
63,
60,
56,
52,
49,
45,
41,
38,
36,
33,
32,
29,
25,
24,
23,
20,
18,
16,
13,
12,
10,
10,
7,
6,
6,
6,
6,
5,
5,
2,
2,
0
],
[
150,
150,
150,
150,
150,
148,
142,
139,
135,
131,
113,
103,
92,
85,
74,
67,
58,
49,
42,
37,
32,
29,
27,
25,
19,
17,
15,
12,
8,
8,
5,
2,
1,
1,
1,
1,
1,
1,
1,
1,
1
],
[
0,
0,
0,
0,
0,
2,
8,
11,
15,
19,
37,
47,
58,
65,
76,
83,
92,
101,
108,
113,
118,
121,
123,
125,
131,
133,
135,
138,
142,
142,
145,
148,
149,
149,
149,
149,
149,
149,
149,
149,
149
],
[
0,
0,
0,
0,
0,
0,
2,
5,
9,
12,
15,
19,
23,
26,
30,
34,
37,
39,
42,
43,
46,
50,
51,
52,
55,
57,
59,
62,
63,
65,
65,
68,
69,
69,
69,
69,
70,
70,
73,
73,
75
],
[
0.02,
0.04,
0.06,
0.08,
0.1,
0.12,
0.14,
0.16,
0.18,
0.2,
0.22,
0.24,
0.26,
0.28,
0.3,
0.32,
0.34,
0.36,
0.38,
0.4,
0.42,
0.44,
0.46,
0.48,
0.5,
0.52,
0.54,
0.56,
0.58,
0.6,
0.62,
0.64,
0.66,
0.68,
0.7,
0.72,
0.74,
0.76,
0.78,
0.8,
0.82
]
]
];
}
return [
[
1593069993.5386739,
0,
[
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3340757191181183,
0.3340807259082794,
0.3371298313140869,
0.3372093141078949,
0.35207822918891907,
0.36269429326057434,
0.3777777850627899,
0.3857566714286804,
0.39087948203086853,
0.4021352231502533,
0.4166666567325592,
0.42489269375801086,
0.44607841968536377,
0.4748603403568268,
0.4909090995788574,
0.5104895234107971,
0.48120301961898804,
0.5041322112083435,
0.5154638886451721,
0.517241358757019,
0.5263158082962036,
0.6140350699424744,
0.6595744490623474,
0.675000011920929,
0.6666666865348816,
0.7727272510528564,
0.7368420958518982,
0.7058823704719543,
0.7692307829856873,
0.800000011920929,
0.800000011920929,
0.7777777910232544,
0.75,
0.7142857313156128,
0.6000000238418579,
0.5,
0.5,
0.5,
0,
0,
0
],
[
1,
1,
1,
1,
1,
1,
0.9933333396911621,
0.9866666793823242,
0.9666666388511658,
0.9599999785423279,
0.9333333373069763,
0.9066666960716248,
0.8666666746139526,
0.800000011920929,
0.753333330154419,
0.699999988079071,
0.6600000262260437,
0.6066666841506958,
0.5666666626930237,
0.5400000214576721,
0.4866666793823242,
0.4266666769981384,
0.40666666626930237,
0.3333333432674408,
0.30000001192092896,
0.2666666805744171,
0.23333333432674408,
0.20666666328907013,
0.18000000715255737,
0.13333334028720856,
0.1133333370089531,
0.09333333373069763,
0.07999999821186066,
0.06666667014360428,
0.0533333346247673,
0.0533333346247673,
0.046666666865348816,
0.03999999910593033,
0.03333333507180214,
0.019999999552965164,
0.013333333656191826,
0.006666666828095913,
0.006666666828095913,
0,
0,
0
],
[
150,
150,
150,
150,
150,
150,
149,
148,
145,
144,
140,
136,
130,
120,
113,
105,
99,
91,
85,
81,
73,
64,
61,
50,
45,
40,
35,
31,
27,
20,
17,
14,
12,
10,
8,
8,
7,
6,
5,
3,
2,
1,
1,
0,
0,
0
],
[
300,
300,
300,
300,
300,
299,
297,
291,
285,
265,
246,
224,
207,
187,
168,
147,
134,
113,
94,
84,
70,
69,
60,
47,
42,
36,
22,
16,
13,
10,
5,
5,
5,
3,
2,
2,
2,
2,
2,
2,
2,
1,
1,
1,
1,
1
],
[
0,
0,
0,
0,
0,
1,
3,
9,
15,
35,
54,
76,
93,
113,
132,
153,
166,
187,
206,
216,
230,
231,
240,
253,
258,
264,
278,
284,
287,
290,
295,
295,
295,
297,
298,
298,
298,
298,
298,
298,
298,
299,
299,
299,
299,
299
],
[
0,
0,
0,
0,
0,
0,
1,
2,
5,
6,
10,
14,
20,
30,
37,
45,
51,
59,
65,
69,
77,
86,
89,
100,
105,
110,
115,
119,
123,
130,
133,
136,
138,
140,
142,
142,
143,
144,
145,
147,
148,
149,
149,
150,
150,
150
],
[
0.02,
0.04,
0.06,
0.08,
0.1,
0.12,
0.14,
0.16,
0.18,
0.2,
0.22,
0.24,
0.26,
0.28,
0.3,
0.32,
0.34,
0.36,
0.38,
0.4,
0.42,
0.44,
0.46,
0.48,
0.5,
0.52,
0.54,
0.56,
0.58,
0.6,
0.62,
0.64,
0.66,
0.68,
0.7,
0.72,
0.74,
0.76,
0.78,
0.8,
0.82,
0.84,
0.86,
0.88,
0.9,
0.92
]
],
[
1593069993.539396,
1,
[
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.33557048439979553,
0.33560091257095337,
0.3498817980289459,
0.35853657126426697,
0.37402597069740295,
0.3835616409778595,
0.3797101378440857,
0.3967213034629822,
0.40072202682495117,
0.40816327929496765,
0.4139534831047058,
0.4334975481033325,
0.45652174949645996,
0.4848484992980957,
0.4829931855201721,
0.5,
0.49180328845977783,
0.49074074625968933,
0.52173912525177,
0.5443037748336792,
0.5352112650871277,
0.5245901346206665,
0.4901960790157318,
0.4545454680919647,
0.4324324429035187,
0.4375,
0.4399999976158142,
0.5,
0.5625,
0.5,
0.4000000059604645,
0.5,
0.4000000059604645,
0.5,
0,
0,
0
],
[
1,
1,
1,
1,
1,
1,
1,
0.9866666793823242,
0.9866666793823242,
0.9800000190734863,
0.9599999785423279,
0.9333333373069763,
0.8733333349227905,
0.8066666722297668,
0.7400000095367432,
0.6666666865348816,
0.5933333039283752,
0.5866666436195374,
0.5600000023841858,
0.5333333611488342,
0.47333332896232605,
0.46000000834465027,
0.4000000059604645,
0.35333332419395447,
0.3199999928474426,
0.2866666615009308,
0.25333333015441895,
0.2133333384990692,
0.1666666716337204,
0.13333334028720856,
0.1066666692495346,
0.09333333373069763,
0.07333333045244217,
0.06666667014360428,
0.05999999865889549,
0.03999999910593033,
0.02666666731238365,
0.02666666731238365,
0.013333333656191826,
0.006666666828095913,
0,
0,
0
],
[
150,
150,
150,
150,
150,
150,
150,
148,
148,
147,
144,
140,
131,
121,
111,
100,
89,
88,
84,
80,
71,
69,
60,
53,
48,
43,
38,
32,
25,
20,
16,
14,
11,
10,
9,
6,
4,
4,
2,
1,
0,
0,
0
],
[
300,
300,
300,
300,
300,
300,
297,
293,
275,
263,
241,
225,
214,
184,
166,
145,
126,
115,
100,
85,
76,
69,
62,
55,
44,
36,
33,
29,
26,
24,
21,
18,
14,
10,
7,
6,
6,
4,
3,
1,
1,
1,
1
],
[
0,
0,
0,
0,
0,
0,
3,
7,
25,
37,
59,
75,
86,
116,
134,
155,
174,
185,
200,
215,
224,
231,
238,
245,
256,
264,
267,
271,
274,
276,
279,
282,
286,
290,
293,
294,
294,
296,
297,
299,
299,
299,
299
],
[
0,
0,
0,
0,
0,
0,
0,
2,
2,
3,
6,
10,
19,
29,
39,
50,
61,
62,
66,
70,
79,
81,
90,
97,
102,
107,
112,
118,
125,
130,
134,
136,
139,
140,
141,
144,
146,
146,
148,
149,
150,
150,
150
],
[
0.02,
0.04,
0.06,
0.08,
0.1,
0.12,
0.14,
0.16,
0.18,
0.2,
0.22,
0.24,
0.26,
0.28,
0.3,
0.32,
0.34,
0.36,
0.38,
0.4,
0.42,
0.44,
0.46,
0.48,
0.5,
0.52,
0.54,
0.56,
0.58,
0.6,
0.62,
0.64,
0.66,
0.68,
0.7,
0.72,
0.74,
0.76,
0.78,
0.8,
0.82,
0.84,
0.86
]
],
[
1593069993.540066,
2,
[
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3348214328289032,
0.33484163880348206,
0.33870968222618103,
0.34433960914611816,
0.35749998688697815,
0.3658536672592163,
0.3742690086364746,
0.3853503167629242,
0.4027777910232544,
0.40784314274787903,
0.4025973975658417,
0.4166666567325592,
0.42328041791915894,
0.45783132314682007,
0.4751773178577423,
0.4296875,
0.4568965435028076,
0.4476190507411957,
0.4838709533214569,
0.5121951103210449,
0.4931506812572479,
0.508474588394165,
0.4901960790157318,
0.4888888895511627,
0.5555555820465088,
0.6333333253860474,
0.6296296119689941,
0.75,
0.75,
0.6666666865348816,
0.75,
0.7142857313156128,
0.6666666865348816,
0.3333333432674408,
0,
0
],
[
1,
1,
1,
1,
1,
1,
0.9866666793823242,
0.9800000190734863,
0.9733333587646484,
0.95333331823349,
0.8999999761581421,
0.8533333539962769,
0.8066666722297668,
0.7733333110809326,
0.6933333277702332,
0.6200000047683716,
0.5666666626930237,
0.5333333611488342,
0.5066666603088379,
0.4466666579246521,
0.36666667461395264,
0.35333332419395447,
0.31333333253860474,
0.30000001192092896,
0.2800000011920929,
0.23999999463558197,
0.20000000298023224,
0.1666666716337204,
0.14666666090488434,
0.13333334028720856,
0.12666666507720947,
0.1133333370089531,
0.10000000149011612,
0.07999999821186066,
0.0533333346247673,
0.03999999910593033,
0.03333333507180214,
0.02666666731238365,
0.006666666828095913,
0,
0
],
[
150,
150,
150,
150,
150,
150,
148,
147,
146,
143,
135,
128,
121,
116,
104,
93,
85,
80,
76,
67,
55,
53,
47,
45,
42,
36,
30,
25,
22,
20,
19,
17,
15,
12,
8,
6,
5,
4,
1,
0,
0
],
[
300,
300,
300,
300,
300,
298,
294,
287,
278,
257,
234,
214,
193,
172,
151,
138,
119,
109,
90,
74,
73,
63,
58,
48,
40,
37,
29,
26,
23,
16,
11,
10,
5,
4,
4,
2,
2,
2,
2,
1,
1
],
[
0,
0,
0,
0,
0,
2,
6,
13,
22,
43,
66,
86,
107,
128,
149,
162,
181,
191,
210,
226,
227,
237,
242,
252,
260,
263,
271,
274,
277,
284,
289,
290,
295,
296,
296,
298,
298,
298,
298,
299,
299
],
[
0,
0,
0,
0,
0,
0,
2,
3,
4,
7,
15,
22,
29,
34,
46,
57,
65,
70,
74,
83,
95,
97,
103,
105,
108,
114,
120,
125,
128,
130,
131,
133,
135,
138,
142,
144,
145,
146,
149,
150,
150
],
[
0.02,
0.04,
0.06,
0.08,
0.1,
0.12,
0.14,
0.16,
0.18,
0.2,
0.22,
0.24,
0.26,
0.28,
0.3,
0.32,
0.34,
0.36,
0.38,
0.4,
0.42,
0.44,
0.46,
0.48,
0.5,
0.52,
0.54,
0.56,
0.58,
0.6,
0.62,
0.64,
0.66,
0.68,
0.7,
0.72,
0.74,
0.76,
0.78,
0.8,
0.82
]
],
[
1593069993.540662,
3,
[
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.33178654313087463,
0.33571428060531616,
0.3350125849246979,
0.3448275923728943,
0.36467236280441284,
0.3639143705368042,
0.3877550959587097,
0.38661709427833557,
0.38211381435394287,
0.3963963985443115,
0.4108910858631134,
0.43406593799591064,
0.4491018056869507,
0.4652777910232544,
0.4880000054836273,
0.4955752193927765,
0.5145630836486816,
0.5,
0.5057471394538879,
0.5194805264472961,
0.5373134613037109,
0.5789473652839661,
0.6000000238418579,
0.5952380895614624,
0.5714285969734192,
0.6785714030265808,
0.6521739363670349,
0.6666666865348816,
0.7142857313156128,
0.7272727489471436,
0.6666666865348816,
0.5,
0.6000000238418579,
0.5,
0.6666666865348816,
0.6666666865348816,
0.6666666865348816,
0.5,
1
],
[
1,
1,
1,
1,
1,
1,
0.9866666793823242,
0.95333331823349,
0.9399999976158142,
0.8866666555404663,
0.8666666746139526,
0.8533333539962769,
0.7933333516120911,
0.7599999904632568,
0.6933333277702332,
0.6266666650772095,
0.5866666436195374,
0.5533333420753479,
0.5266666412353516,
0.5,
0.4466666579246521,
0.40666666626930237,
0.3733333349227905,
0.35333332419395447,
0.31333333253860474,
0.2933333218097687,
0.2666666805744171,
0.23999999463558197,
0.2199999988079071,
0.20000000298023224,
0.1666666716337204,
0.13333334028720856,
0.12666666507720947,
0.10000000149011612,
0.07999999821186066,
0.06666667014360428,
0.0533333346247673,
0.03999999910593033,
0.019999999552965164,
0.019999999552965164,
0.013333333656191826,
0.013333333656191826,
0.013333333656191826,
0.013333333656191826,
0.006666666828095913,
0.006666666828095913
],
[
150,
150,
150,
150,
150,
150,
148,
143,
141,
133,
130,
128,
119,
114,
104,
94,
88,
83,
79,
75,
67,
61,
56,
53,
47,
44,
40,
36,
33,
30,
25,
20,
19,
15,
12,
10,
8,
6,
3,
3,
2,
2,
2,
2,
1,
1
],
[
300,
300,
300,
300,
300,
300,
296,
288,
279,
264,
247,
223,
208,
180,
165,
152,
134,
119,
103,
92,
77,
64,
57,
50,
47,
43,
37,
31,
24,
20,
17,
15,
9,
8,
6,
4,
3,
3,
3,
2,
2,
1,
1,
1,
1,
0
],
[
0,
0,
0,
0,
0,
0,
4,
12,
21,
36,
53,
77,
92,
120,
135,
148,
166,
181,
197,
208,
223,
236,
243,
250,
253,
257,
263,
269,
276,
280,
283,
285,
291,
292,
294,
296,
297,
297,
297,
298,
298,
299,
299,
299,
299,
300
],
[
0,
0,
0,
0,
0,
0,
2,
7,
9,
17,
20,
22,
31,
36,
46,
56,
62,
67,
71,
75,
83,
89,
94,
97,
103,
106,
110,
114,
117,
120,
125,
130,
131,
135,
138,
140,
142,
144,
147,
147,
148,
148,
148,
148,
149,
149
],
[
0.02,
0.04,
0.06,
0.08,
0.1,
0.12,
0.14,
0.16,
0.18,
0.2,
0.22,
0.24,
0.26,
0.28,
0.3,
0.32,
0.34,
0.36,
0.38,
0.4,
0.42,
0.44,
0.46,
0.48,
0.5,
0.52,
0.54,
0.56,
0.58,
0.6,
0.62,
0.64,
0.66,
0.68,
0.7,
0.72,
0.74,
0.76,
0.78,
0.8,
0.82,
0.84,
0.86,
0.88,
0.9,
0.92
]
],
[
1593069993.541333,
4,
[
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3340757191181183,
0.3363228738307953,
0.33563217520713806,
0.3445783257484436,
0.3544303774833679,
0.36164382100105286,
0.366568922996521,
0.369905948638916,
0.37931033968925476,
0.3807692229747772,
0.40611353516578674,
0.41747573018074036,
0.44324323534965515,
0.4522292912006378,
0.48905110359191895,
0.4880000054836273,
0.5185185074806213,
0.5257731676101685,
0.5454545617103577,
0.5512820482254028,
0.5735294222831726,
0.5964912176132202,
0.5961538553237915,
0.5609756112098694,
0.5675675868988037,
0.6428571343421936,
0.6363636255264282,
0.6470588445663452,
0.5,
0.5454545617103577,
0.5555555820465088,
0.625,
0.6666666865348816,
0.3333333432674408,
0,
0,
0,
0
],
[
1,
1,
1,
1,
1,
1,
1,
0.9733333587646484,
0.95333331823349,
0.9333333373069763,
0.8799999952316284,
0.8333333134651184,
0.7866666913032532,
0.7333333492279053,
0.6600000262260437,
0.6200000047683716,
0.5733333230018616,
0.54666668176651,
0.47333332896232605,
0.4466666579246521,
0.40666666626930237,
0.3733333349227905,
0.3400000035762787,
0.3199999928474426,
0.2866666615009308,
0.25999999046325684,
0.2266666740179062,
0.20666666328907013,
0.15333333611488342,
0.14000000059604645,
0.11999999731779099,
0.09333333373069763,
0.07333333045244217,
0.03999999910593033,
0.03999999910593033,
0.03333333507180214,
0.03333333507180214,
0.02666666731238365,
0.006666666828095913,
0,
0,
0,
0
],
[
150,
150,
150,
150,
150,
150,
150,
146,
143,
140,
132,
125,
118,
110,
99,
93,
86,
82,
71,
67,
61,
56,
51,
48,
43,
39,
34,
31,
23,
21,
18,
14,
11,
6,
6,
5,
5,
4,
1,
0,
0,
0,
0
],
[
300,
300,
300,
300,
300,
299,
296,
289,
272,
255,
233,
216,
201,
180,
161,
136,
120,
103,
86,
70,
64,
52,
46,
40,
35,
29,
23,
21,
18,
16,
10,
8,
6,
6,
5,
4,
3,
2,
2,
2,
2,
1,
1
],
[
0,
0,
0,
0,
0,
1,
4,
11,
28,
45,
67,
84,
99,
120,
139,
164,
180,
197,
214,
230,
236,
248,
254,
260,
265,
271,
277,
279,
282,
284,
290,
292,
294,
294,
295,
296,
297,
298,
298,
298,
298,
299,
299
],
[
0,
0,
0,
0,
0,
0,
0,
4,
7,
10,
18,
25,
32,
40,
51,
57,
64,
68,
79,
83,
89,
94,
99,
102,
107,
111,
116,
119,
127,
129,
132,
136,
139,
144,
144,
145,
145,
146,
149,
150,
150,
150,
150
],
[
0.02,
0.04,
0.06,
0.08,
0.1,
0.12,
0.14,
0.16,
0.18,
0.2,
0.22,
0.24,
0.26,
0.28,
0.3,
0.32,
0.34,
0.36,
0.38,
0.4,
0.42,
0.44,
0.46,
0.48,
0.5,
0.52,
0.54,
0.56,
0.58,
0.6,
0.62,
0.64,
0.66,
0.68,
0.7,
0.72,
0.74,
0.76,
0.78,
0.8,
0.82,
0.84,
0.86
]
],
[
1593069993.542078,
5,
[
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.33557048439979553,
0.3355855941772461,
0.33944955468177795,
0.3501199185848236,
0.35249999165534973,
0.35978835821151733,
0.35919541120529175,
0.35403725504875183,
0.37288135290145874,
0.3730769157409668,
0.3822222352027893,
0.39086294174194336,
0.42941176891326904,
0.4394904375076294,
0.47183099389076233,
0.5079365372657776,
0.5398229956626892,
0.5148515105247498,
0.5348837375640869,
0.5432098507881165,
0.5882353186607361,
0.5932203531265259,
0.5714285969734192,
0.5909090638160706,
0.6341463327407837,
0.6285714507102966,
0.6333333253860474,
0.6000000238418579,
0.5714285969734192,
0.5263158082962036,
0.5,
0.4166666567325592,
0.2222222238779068,
0.2857142984867096,
0.25,
0.3333333432674408,
0,
0,
0
],
[
1,
1,
1,
1,
1,
1,
0.9933333396911621,
0.9866666793823242,
0.9733333587646484,
0.9399999976158142,
0.9066666960716248,
0.8333333134651184,
0.7599999904632568,
0.7333333492279053,
0.6466666460037231,
0.5733333230018616,
0.5133333206176758,
0.4866666793823242,
0.46000000834465027,
0.4466666579246521,
0.4266666769981384,
0.40666666626930237,
0.3466666638851166,
0.30666667222976685,
0.2933333218097687,
0.2666666805744171,
0.23333333432674408,
0.18666666746139526,
0.1733333319425583,
0.1733333319425583,
0.14666666090488434,
0.12666666507720947,
0.10000000149011612,
0.07999999821186066,
0.06666667014360428,
0.046666666865348816,
0.03333333507180214,
0.013333333656191826,
0.013333333656191826,
0.006666666828095913,
0.006666666828095913,
0,
0,
0
],
[
150,
150,
150,
150,
150,
150,
149,
148,
146,
141,
136,
125,
114,
110,
97,
86,
77,
73,
69,
67,
64,
61,
52,
46,
44,
40,
35,
28,
26,
26,
22,
19,
15,
12,
10,
7,
5,
2,
2,
1,
1,
0,
0,
0
],
[
300,
300,
300,
300,
300,
297,
295,
288,
271,
259,
242,
223,
208,
185,
163,
139,
120,
97,
88,
75,
62,
52,
49,
40,
37,
28,
24,
21,
18,
15,
13,
11,
10,
9,
9,
7,
7,
7,
5,
3,
2,
2,
1,
1
],
[
0,
0,
0,
0,
0,
3,
5,
12,
29,
41,
58,
77,
92,
115,
137,
161,
180,
203,
212,
225,
238,
248,
251,
260,
263,
272,
276,
279,
282,
285,
287,
289,
290,
291,
291,
293,
293,
293,
295,
297,
298,
298,
299,
299
],
[
0,
0,
0,
0,
0,
0,
1,
2,
4,
9,
14,
25,
36,
40,
53,
64,
73,
77,
81,
83,
86,
89,
98,
104,
106,
110,
115,
122,
124,
124,
128,
131,
135,
138,
140,
143,
145,
148,
148,
149,
149,
150,
150,
150
],
[
0.02,
0.04,
0.06,
0.08,
0.1,
0.12,
0.14,
0.16,
0.18,
0.2,
0.22,
0.24,
0.26,
0.28,
0.3,
0.32,
0.34,
0.36,
0.38,
0.4,
0.42,
0.44,
0.46,
0.48,
0.5,
0.52,
0.54,
0.56,
0.58,
0.6,
0.62,
0.64,
0.66,
0.68,
0.7,
0.72,
0.74,
0.76,
0.78,
0.8,
0.82,
0.84,
0.86,
0.88
]
],
[
1593069993.5431821,
6,
[
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3303571343421936,
0.33257919549942017,
0.33642691373825073,
0.34285715222358704,
0.35087719559669495,
0.36239781975746155,
0.37134504318237305,
0.38485804200172424,
0.4000000059604645,
0.4089219272136688,
0.43096235394477844,
0.43518519401550293,
0.4202127754688263,
0.42603549361228943,
0.43918919563293457,
0.44525548815727234,
0.45967742800712585,
0.4821428656578064,
0.5102040767669678,
0.529411792755127,
0.5128205418586731,
0.5797101259231567,
0.550000011920929,
0.5094339847564697,
0.4888888895511627,
0.46341463923454285,
0.375,
0.3461538553237915,
0.4000000059604645,
0.4000000059604645,
0.3333333432674408,
0.27272728085517883,
0.3333333432674408,
0.3333333432674408,
0.2857142984867096,
0.3333333432674408,
0.3333333432674408,
0.6666666865348816,
0.5,
1
],
[
1,
1,
1,
1,
1,
0.9866666793823242,
0.9800000190734863,
0.9666666388511658,
0.9599999785423279,
0.9333333373069763,
0.8866666555404663,
0.846666693687439,
0.8133333325386047,
0.7599999904632568,
0.7333333492279053,
0.6866666674613953,
0.6266666650772095,
0.5266666412353516,
0.47999998927116394,
0.4333333373069763,
0.40666666626930237,
0.3799999952316284,
0.36000001430511475,
0.3333333432674408,
0.30000001192092896,
0.2666666805744171,
0.2666666805744171,
0.2199999988079071,
0.18000000715255737,
0.14666666090488434,
0.12666666507720947,
0.07999999821186066,
0.05999999865889549,
0.0533333346247673,
0.03999999910593033,
0.02666666731238365,
0.019999999552965164,
0.019999999552965164,
0.019999999552965164,
0.013333333656191826,
0.013333333656191826,
0.013333333656191826,
0.013333333656191826,
0.006666666828095913,
0.006666666828095913
],
[
150,
150,
150,
150,
150,
148,
147,
145,
144,
140,
133,
127,
122,
114,
110,
103,
94,
79,
72,
65,
61,
57,
54,
50,
45,
40,
40,
33,
27,
22,
19,
12,
9,
8,
6,
4,
3,
3,
3,
2,
2,
2,
2,
1,
1
],
[
300,
300,
300,
300,
300,
300,
295,
286,
276,
259,
234,
215,
195,
171,
159,
136,
122,
109,
97,
83,
76,
67,
58,
48,
40,
38,
29,
27,
26,
23,
22,
20,
17,
12,
9,
8,
8,
6,
6,
5,
4,
4,
1,
1,
0
],
[
0,
0,
0,
0,
0,
0,
5,
14,
24,
41,
66,
85,
105,
129,
141,
164,
178,
191,
203,
217,
224,
233,
242,
252,
260,
262,
271,
273,
274,
277,
278,
280,
283,
288,
291,
292,
292,
294,
294,
295,
296,
296,
299,
299,
300
],
[
0,
0,
0,
0,
0,
2,
3,
5,
6,
10,
17,
23,
28,
36,
40,
47,
56,
71,
78,
85,
89,
93,
96,
100,
105,
110,
110,
117,
123,
128,
131,
138,
141,
142,
144,
146,
147,
147,
147,
148,
148,
148,
148,
149,
149
],
[
0.02,
0.04,
0.06,
0.08,
0.1,
0.12,
0.14,
0.16,
0.18,
0.2,
0.22,
0.24,
0.26,
0.28,
0.3,
0.32,
0.34,
0.36,
0.38,
0.4,
0.42,
0.44,
0.46,
0.48,
0.5,
0.52,
0.54,
0.56,
0.58,
0.6,
0.62,
0.64,
0.66,
0.68,
0.7,
0.72,
0.74,
0.76,
0.78,
0.8,
0.82,
0.84,
0.86,
0.88,
0.9
]
],
[
1593069993.543998,
7,
[
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3340757191181183,
0.3348214328289032,
0.33636364340782166,
0.3380281627178192,
0.3483709394931793,
0.35449734330177307,
0.3672316372394562,
0.381538450717926,
0.39464882016181946,
0.3970588147640228,
0.40416666865348816,
0.4084506928920746,
0.42328041791915894,
0.4497041404247284,
0.4868420958518982,
0.5072463750839233,
0.529411792755127,
0.5267857313156128,
0.5050504803657532,
0.5056179761886597,
0.5131579041481018,
0.5072463750839233,
0.515625,
0.5636363625526428,
0.5686274766921997,
0.5744680762290955,
0.5581395626068115,
0.5277777910232544,
0.5,
0.43478259444236755,
0.4444444477558136,
0.4375,
0.5833333134651184,
0.5,
0.25,
0,
0,
0,
0,
0
],
[
1,
1,
1,
1,
1,
1,
0.9866666793823242,
0.9599999785423279,
0.9266666769981384,
0.8933333158493042,
0.8666666746139526,
0.8266666531562805,
0.7866666913032532,
0.7200000286102295,
0.6466666460037231,
0.5799999833106995,
0.5333333611488342,
0.5066666603088379,
0.4933333396911621,
0.46666666865348816,
0.41999998688697815,
0.3933333456516266,
0.3333333432674408,
0.30000001192092896,
0.25999999046325684,
0.23333333432674408,
0.2199999988079071,
0.20666666328907013,
0.19333332777023315,
0.18000000715255737,
0.1599999964237213,
0.12666666507720947,
0.10000000149011612,
0.06666667014360428,
0.0533333346247673,
0.046666666865348816,
0.046666666865348816,
0.02666666731238365,
0.006666666828095913,
0,
0,
0,
0,
0
],
[
150,
150,
150,
150,
150,
150,
148,
144,
139,
134,
130,
124,
118,
108,
97,
87,
80,
76,
74,
70,
63,
59,
50,
45,
39,
35,
33,
31,
29,
27,
24,
19,
15,
10,
8,
7,
7,
4,
1,
0,
0,
0,
0,
0
],
[
300,
300,
300,
300,
299,
298,
292,
282,
260,
244,
224,
201,
181,
164,
143,
126,
109,
93,
78,
68,
56,
53,
49,
44,
37,
34,
31,
24,
22,
20,
19,
17,
15,
13,
10,
9,
5,
4,
3,
2,
1,
1,
1,
1
],
[
0,
0,
0,
0,
1,
2,
8,
18,
40,
56,
76,
99,
119,
136,
157,
174,
191,
207,
222,
232,
244,
247,
251,
256,
263,
266,
269,
276,
278,
280,
281,
283,
285,
287,
290,
291,
295,
296,
297,
298,
299,
299,
299,
299
],
[
0,
0,
0,
0,
0,
0,
2,
6,
11,
16,
20,
26,
32,
42,
53,
63,
70,
74,
76,
80,
87,
91,
100,
105,
111,
115,
117,
119,
121,
123,
126,
131,
135,
140,
142,
143,
143,
146,
149,
150,
150,
150,
150,
150
],
[
0.02,
0.04,
0.06,
0.08,
0.1,
0.12,
0.14,
0.16,
0.18,
0.2,
0.22,
0.24,
0.26,
0.28,
0.3,
0.32,
0.34,
0.36,
0.38,
0.4,
0.42,
0.44,
0.46,
0.48,
0.5,
0.52,
0.54,
0.56,
0.58,
0.6,
0.62,
0.64,
0.66,
0.68,
0.7,
0.72,
0.74,
0.76,
0.78,
0.8,
0.82,
0.84,
0.86,
0.88
]
],
[
1593069993.5449128,
8,
[
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3340757191181183,
0.33483144640922546,
0.33638444542884827,
0.3452380895614624,
0.34405940771102905,
0.3489583432674408,
0.35164836049079895,
0.34593021869659424,
0.35825544595718384,
0.38327527046203613,
0.3897637724876404,
0.4196428656578064,
0.44607841968536377,
0.45945945382118225,
0.4819277226924896,
0.4791666567325592,
0.484375,
0.5044247508049011,
0.5102040767669678,
0.5176470875740051,
0.5375000238418579,
0.5540540814399719,
0.5671641826629639,
0.5833333134651184,
0.6170212626457214,
0.625,
0.7096773982048035,
0.7307692170143127,
0.7727272510528564,
0.8333333134651184,
0.8571428656578064,
0.8181818127632141,
0.8999999761581421,
1,
1,
1,
1,
1,
1
],
[
1,
1,
1,
1,
1,
0.9933333396911621,
0.9800000190734863,
0.9666666388511658,
0.9266666769981384,
0.8933333158493042,
0.8533333539962769,
0.7933333516120911,
0.7666666507720947,
0.7333333492279053,
0.6600000262260437,
0.6266666650772095,
0.6066666841506958,
0.5666666626930237,
0.5333333611488342,
0.46000000834465027,
0.41333332657814026,
0.3799999952316284,
0.3333333432674408,
0.2933333218097687,
0.2866666615009308,
0.273333340883255,
0.25333333015441895,
0.23333333432674408,
0.19333332777023315,
0.1666666716337204,
0.14666666090488434,
0.12666666507720947,
0.1133333370089531,
0.10000000149011612,
0.07999999821186066,
0.05999999865889549,
0.05999999865889549,
0.046666666865348816,
0.03999999910593033,
0.03999999910593033,
0.03333333507180214,
0.013333333656191826,
0.013333333656191826
],
[
150,
150,
150,
150,
150,
149,
147,
145,
139,
134,
128,
119,
115,
110,
99,
94,
91,
85,
80,
69,
62,
57,
50,
44,
43,
41,
38,
35,
29,
25,
22,
19,
17,
15,
12,
9,
9,
7,
6,
6,
5,
2,
2
],
[
300,
300,
300,
300,
299,
296,
290,
275,
265,
250,
236,
225,
206,
177,
155,
130,
113,
100,
86,
75,
66,
56,
48,
41,
37,
33,
29,
25,
18,
15,
9,
7,
5,
3,
2,
2,
1,
0,
0,
0,
0,
0,
0
],
[
0,
0,
0,
0,
1,
4,
10,
25,
35,
50,
64,
75,
94,
123,
145,
170,
187,
200,
214,
225,
234,
244,
252,
259,
263,
267,
271,
275,
282,
285,
291,
293,
295,
297,
298,
298,
299,
300,
300,
300,
300,
300,
300
],
[
0,
0,
0,
0,
0,
1,
3,
5,
11,
16,
22,
31,
35,
40,
51,
56,
59,
65,
70,
81,
88,
93,
100,
106,
107,
109,
112,
115,
121,
125,
128,
131,
133,
135,
138,
141,
141,
143,
144,
144,
145,
148,
148
],
[
0.02,
0.04,
0.06,
0.08,
0.1,
0.12,
0.14,
0.16,
0.18,
0.2,
0.22,
0.24,
0.26,
0.28,
0.3,
0.32,
0.34,
0.36,
0.38,
0.4,
0.42,
0.44,
0.46,
0.48,
0.5,
0.52,
0.54,
0.56,
0.58,
0.6,
0.62,
0.64,
0.66,
0.68,
0.7,
0.72,
0.74,
0.76,
0.78,
0.8,
0.82,
0.84,
0.86
]
],
[
1593069993.54562,
9,
[
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3333333432674408,
0.3340807259082794,
0.33870968222618103,
0.3388625681400299,
0.3432098627090454,
0.35078534483909607,
0.37321937084198,
0.3792048990726471,
0.3872053921222687,
0.3955223858356476,
0.42016807198524475,
0.43317973613739014,
0.43617022037506104,
0.4588235318660736,
0.4736842215061188,
0.4848484992980957,
0.5,
0.49038460850715637,
0.5106382966041565,
0.5411764979362488,
0.5857142806053162,
0.5645161271095276,
0.5714285969734192,
0.6041666865348816,
0.6666666865348816,
0.6571428775787354,
0.7333333492279053,
0.8260869383811951,
0.8333333134651184,
0.875,
0.8181818127632141,
0.8181818127632141,
0.8888888955116272,
0.8888888955116272,
0.800000011920929,
0.800000011920929,
0
],
[
1,
1,
1,
1,
1,
0.9933333396911621,
0.9800000190734863,
0.95333331823349,
0.9266666769981384,
0.8933333158493042,
0.8733333349227905,
0.8266666531562805,
0.7666666507720947,
0.7066666483879089,
0.6666666865348816,
0.6266666650772095,
0.54666668176651,
0.5199999809265137,
0.47999998927116394,
0.4266666769981384,
0.3933333456516266,
0.3400000035762787,
0.3199999928474426,
0.30666667222976685,
0.273333340883255,
0.23333333432674408,
0.2133333384990692,
0.19333332777023315,
0.1733333319425583,
0.15333333611488342,
0.14666666090488434,
0.12666666507720947,
0.10000000149011612,
0.09333333373069763,
0.05999999865889549,
0.05999999865889549,
0.0533333346247673,
0.0533333346247673,
0.02666666731238365,
0.02666666731238365,
0
],
[
150,
150,
150,
150,
150,
149,
147,
143,
139,
134,
131,
124,
115,
106,
100,
94,
82,
78,
72,
64,
59,
51,
48,
46,
41,
35,
32,
29,
26,
23,
22,
19,
15,
14,
9,
9,
8,
8,
4,
4,
0
],
[
300,
300,
300,
300,
300,
297,
287,
279,
266,
248,
220,
203,
182,
162,
138,
123,
106,
92,
80,
68,
59,
53,
46,
39,
29,
27,
24,
19,
13,
12,
8,
4,
3,
2,
2,
2,
1,
1,
1,
1,
1
],
[
0,
0,
0,
0,
0,
3,
13,
21,
34,
52,
80,
97,
118,
138,
162,
177,
194,
208,
220,
232,
241,
247,
254,
261,
271,
273,
276,
281,
287,
288,
292,
296,
297,
298,
298,
298,
299,
299,
299,
299,
299
],
[
0,
0,
0,
0,
0,
1,
3,
7,
11,
16,
19,
26,
35,
44,
50,
56,
68,
72,
78,
86,
91,
99,
102,
104,
109,
115,
118,
121,
124,
127,
128,
131,
135,
136,
141,
141,
142,
142,
146,
146,
150
],
[
0.02,
0.04,
0.06,
0.08,
0.1,
0.12,
0.14,
0.16,
0.18,
0.2,
0.22,
0.24,
0.26,
0.28,
0.3,
0.32,
0.34,
0.36,
0.38,
0.4,
0.42,
0.44,
0.46,
0.48,
0.5,
0.52,
0.54,
0.56,
0.58,
0.6,
0.62,
0.64,
0.66,
0.68,
0.7,
0.72,
0.74,
0.76,
0.78,
0.8,
0.82
]
]
];
};
import {Request} from 'express';
export default (request: Request) => {
if (request.query.run === 'train') {
return [
[1593069993.786464, 0],
[1593069993.787353, 1],
[1593069993.7881448, 2],
[1593069993.788836, 3],
[1593069993.7894, 4],
[1593069993.790076, 5],
[1593069993.790763, 6],
[1593069993.791473, 7],
[1593069993.792149, 8],
[1593069993.792763, 9]
];
}
return [
[1593069993.5386739, 0],
[1593069993.539396, 1],
[1593069993.540066, 2],
[1593069993.540662, 3],
[1593069993.541333, 4],
[1593069993.542078, 5],
[1593069993.5431821, 6],
[1593069993.543998, 7],
[1593069993.5449128, 8],
[1593069993.54562, 9]
];
};
export default {
test: ['layer2/biases/summaries/mean', 'test/1234', 'another'],
train: [
'layer2/biases/summaries/mean',
'layer2/biases/summaries/accuracy',
'layer2/biases/summaries/cost',
'test/431',
'others'
]
};
......@@ -38,7 +38,7 @@
"devDependencies": {
"@types/express": "4.17.6",
"@types/faker": "4.1.12",
"@types/node": "14.0.13",
"@types/node": "14.0.14",
"typescript": "3.9.5"
},
"peerDependencies": {
......
......@@ -35,12 +35,12 @@
"dagre": "0.8.5",
"long": "4.0.0",
"marked": "1.1.0",
"netron": "lutzroeder/netron#9f9be2e1d0cdeb538fcddbc359f1b4138223a953",
"netron": "PeterPanZH/netron",
"pako": "1.0.11",
"protobufjs": "lutzroeder/protobuf.js#b9a9d027589356226f4704f9d77f2639f52172f3"
},
"devDependencies": {
"autoprefixer": "9.8.2",
"autoprefixer": "9.8.4",
"copy-webpack-plugin": "6.0.2",
"css-loader": "3.6.0",
"html-webpack-plugin": "4.3.0",
......
......@@ -1026,19 +1026,21 @@ view.ModelFactoryService = class {
this.register('./tflite', ['.tflite', '.lite', '.tfl', '.bin', '.pb', '.tmfile', '.h5', '.model', '.json']);
this.register('./tf', ['.pb', '.meta', '.pbtxt', '.prototxt', '.json', '.index', '.ckpt']);
this.register('./mediapipe', ['.pbtxt']);
this.register('./sklearn', ['.pkl', '.joblib', '.model', '.meta', '.pb']);
this.register('./uff', ['.uff', '.pb', '.trt', '.pbtxt', '.uff.txt']);
this.register('./sklearn', ['.pkl', '.pickle', '.joblib', '.model', '.meta', '.pb', '.pt', '.h5']);
this.register('./cntk', ['.model', '.cntk', '.cmf', '.dnn']);
this.register('./paddle', ['.paddle', '__model__']);
this.register('./paddle', ['.paddle', '.pdmodel', '__model__']);
this.register('./armnn', ['.armnn']);
this.register('./bigdl', ['.model', '.bigdl']);
this.register('./darknet', ['.cfg', '.model']);
this.register('./mnn', ['.mnn']);
this.register('./ncnn', ['.param', '.bin', '.cfg.ncnn', '.weights.ncnn']);
this.register('./tnn', ['.tnnproto', '.tnnmodel']);
this.register('./tengine', ['.tmfile']);
this.register('./barracuda', ['.nn']);
this.register('./openvino', ['.xml', '.bin']);
this.register('./flux', ['.bson']);
this.register('./chainer', ['.npz', '.h5', '.hd5', '.hdf5']);
this.register('./npz', ['.npz', '.h5', '.hd5', '.hdf5']);
this.register('./dl4j', ['.zip']);
this.register('./mlnet', ['.zip']);
}
......@@ -1300,27 +1302,21 @@ view.ModelFactoryService = class {
return Promise.reject(new ModelError('File has no content.', true));
}
const list = [
{name: 'ELF executable', value: '\x7FELF'},
{name: 'Git LFS header', value: 'version https://git-lfs.github.com/spec/v1\n'},
{name: 'Git LFS header', value: 'oid sha256:'},
{name: 'HTML markup', value: '<html>'},
{name: 'HTML markup', value: '<!DOCTYPE html>'},
{name: 'HTML markup', value: '<!DOCTYPE HTML>'},
{name: 'HTML markup', value: '\n\n\n\n\n<!DOCTYPE html>'},
{name: 'HTML markup', value: '\n\n\n\n\n\n<!DOCTYPE html>'},
{name: 'Unity metadata', value: 'fileFormatVersion:'},
{name: 'Vulkan SwiftShader ICD manifest', value: '{"file_format_version": "1.0.0", "ICD":'},
{name: 'StringIntLabelMapProto data', value: 'item {\r\n id:'},
{name: 'StringIntLabelMapProto data', value: 'item {\r\n name:'},
{name: 'StringIntLabelMapProto data', value: 'item {\n id:'},
{name: 'StringIntLabelMapProto data', value: 'item {\n name:'},
{name: 'Python source code', value: 'import sys, types, os;'}
{name: 'ELF executable', value: /^\x7FELF/},
{name: 'Git LFS header', value: /^version https:\/\/git-lfs.github.com\/spec\/v1\n/},
{name: 'Git LFS header', value: /^oid sha256:/},
{name: 'HTML markup', value: /^\s*<html>/},
{name: 'HTML markup', value: /^\s*<!DOCTYPE html>/},
{name: 'HTML markup', value: /^\s*<!DOCTYPE HTML>/},
{name: 'Unity metadata', value: /^fileFormatVersion:/},
{name: 'Vulkan SwiftShader ICD manifest', value: /^{\s*"file_format_version":\s*"1.0.0"\s*,\s*"ICD":/},
{name: 'StringIntLabelMapProto data', value: /^item\s*{\r?\n\s*id:/},
{name: 'StringIntLabelMapProto data', value: /^item\s*{\r?\n\s*name:/},
{name: 'Python source code', value: /^\s*import sys, types, os;/}
];
const text = new TextDecoder().decode(buffer.subarray(0, Math.min(1024, buffer.length)));
for (const item of list) {
if (
buffer.length >= item.value.length &&
buffer.subarray(0, item.value.length).every((v, i) => v === item.value.charCodeAt(i))
) {
if (text.match(item.value)) {
return Promise.reject(new ModelError('Invalid file content. File contains ' + item.name + '.', true));
}
}
......
......@@ -46,9 +46,9 @@
},
"devDependencies": {
"@types/express": "4.17.6",
"@types/node": "14.0.13",
"@types/node": "14.0.14",
"@types/shelljs": "0.8.8",
"@types/webpack": "4.41.17",
"@types/webpack": "4.41.18",
"@types/webpack-dev-middleware": "3.7.1",
"@visualdl/mock": "2.0.0-beta.43",
"cross-env": "7.0.2",
......
......@@ -31,7 +31,7 @@
"test": "echo \"Error: no test specified\" && exit 0"
},
"devDependencies": {
"@types/node": "14.0.13",
"@types/node": "14.0.14",
"@types/rimraf": "3.0.0",
"@visualdl/core": "2.0.0-beta.43",
"cross-env": "7.0.2",
......
......@@ -2393,10 +2393,10 @@
dependencies:
defer-to-connect "^1.0.1"
"@tippyjs/react@4.0.4":
version "4.0.4"
resolved "https://registry.yarnpkg.com/@tippyjs/react/-/react-4.0.4.tgz#7ba87ff8ad27eb4d5fae6daa4217f7d4de72088d"
integrity sha512-XifxYQU9Wx52gWRkF5WNDAurKh+s0O6B+j3nLLSCnhz8HigQlHuvsr+5ISiqFpeoA5/NAgFxLi6FPLNq8DfD8g==
"@tippyjs/react@4.0.5":
version "4.0.5"
resolved "https://registry.yarnpkg.com/@tippyjs/react/-/react-4.0.5.tgz#804399370d929b29bb6387b7dad9452635ee4221"
integrity sha512-Q7hv4Kkz5XlL71KP/SY8mdrfOkNkOmyQbMl2gh5fNPSzsqlPvAFbMyOP8iI0MS/sHASYGfth4+D9SzyTkrheTw==
dependencies:
tippy.js "^6.2.0"
......@@ -2430,10 +2430,10 @@
resolved "https://registry.yarnpkg.com/@types/d3-format/-/d3-format-1.3.1.tgz#35bf88264bd6bcda39251165bb827f67879c4384"
integrity sha512-KAWvReOKMDreaAwOjdfQMm0HjcUMlQG47GwqdVKgmm20vTd2pucj0a70c3gUSHrnsmo6H2AMrkBsZU2UhJLq8A==
"@types/echarts@4.6.2":
version "4.6.2"
resolved "https://registry.yarnpkg.com/@types/echarts/-/echarts-4.6.2.tgz#f66b8736e2a554f432d58ec0361bf9c9d908ccfc"
integrity sha512-ovishXXoibnoPTgevsmZuuoVaHGzFlvBEsGzcdldlRwxiUsL+ChOfRat5JRWv5W2zUHxkposYQw+m0aDJM+S3Q==
"@types/echarts@4.6.3":
version "4.6.3"
resolved "https://registry.yarnpkg.com/@types/echarts/-/echarts-4.6.3.tgz#227b33b106203ceb2ca4fa51760f406618caa89a"
integrity sha512-XsDsLtPDxSGPqcHvVEbH+z5r9lPiduNOf4aL3NjGprQ/4SliDiTS7DErimHpVdiEOoVFzwjn2usvgLOb1JqOJA==
dependencies:
"@types/zrender" "*"
......@@ -2510,10 +2510,10 @@
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.4.tgz#38fd73ddfd9b55abb1e1b2ed578cb55bd7b7d339"
integrity sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA==
"@types/lodash@4.14.156":
version "4.14.156"
resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.156.tgz#cbe30909c89a1feeb7c60803e785344ea0ec82d1"
integrity sha512-l2AgHXcKUwx2DsvP19wtRPqZ4NkONjmorOdq4sMcxIjqdIuuV/ULo2ftuv4NUpevwfW7Ju/UKLqo0ZXuEt/8lQ==
"@types/lodash@4.14.157":
version "4.14.157"
resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.157.tgz#fdac1c52448861dfde1a2e1515dbc46e54926dc8"
integrity sha512-Ft5BNFmv2pHDgxV5JDsndOWTRJ+56zte0ZpYLowp03tW+K+t8u8YMOzAnpuqPgzX6WO1XpDIUm7u04M8vdDiVQ==
"@types/long@^4.0.0":
version "4.0.1"
......@@ -2552,10 +2552,10 @@
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.5.tgz#3d03acd3b3414cf67faf999aed11682ed121f22b"
integrity sha512-90hiq6/VqtQgX8Sp0EzeIsv3r+ellbGj4URKj5j30tLlZvRUpnAe9YbYnjl3pJM93GyXU0tghHhvXHq+5rnCKA==
"@types/node@14.0.13":
version "14.0.13"
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.13.tgz#ee1128e881b874c371374c1f72201893616417c9"
integrity sha512-rouEWBImiRaSJsVA+ITTFM6ZxibuAlTuNOCyxVbwreu6k6+ujs7DfnU9o+PShFhET78pMBl3eH+AGSI5eOTkPA==
"@types/node@14.0.14":
version "14.0.14"
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.14.tgz#24a0b5959f16ac141aeb0c5b3cd7a15b7c64cbce"
integrity sha512-syUgf67ZQpaJj01/tRTknkMNoBBLWJOBODF0Zm4NrXmiSuxjymFrxnTu1QVYRubhVkRcZLYZG8STTwJRdVm/WQ==
"@types/node@^10.1.0":
version "10.17.24"
......@@ -2619,10 +2619,10 @@
"@types/prop-types" "*"
csstype "^2.2.0"
"@types/react@16.9.38":
version "16.9.38"
resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.38.tgz#868405dace93a4095d3e054f4c4a1de7a1ac0680"
integrity sha512-pHAeZbjjNRa/hxyNuLrvbxhhnKyKNiLC6I5fRF2Zr/t/S6zS41MiyzH4+c+1I9vVfvuRt1VS2Lodjr4ZWnxrdA==
"@types/react@16.9.41":
version "16.9.41"
resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.41.tgz#925137ee4d2ff406a0ecf29e8e9237390844002e"
integrity sha512-6cFei7F7L4wwuM+IND/Q2cV1koQUvJ8iSV+Gwn0c3kvABZ691g7sp3hfEQHOUBJtccl1gPi+EyNjMIl9nGA0ug==
dependencies:
"@types/prop-types" "*"
csstype "^2.2.0"
......@@ -2716,7 +2716,19 @@
"@types/webpack-sources" "*"
source-map "^0.6.0"
"@types/webpack@4.41.17", "@types/webpack@^4.41.8":
"@types/webpack@4.41.18":
version "4.41.18"
resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.18.tgz#2945202617866ecdffa582087f1b6de04a7eed55"
integrity sha512-mQm2R8vV2BZE/qIDVYqmBVLfX73a8muwjs74SpjEyJWJxeXBbsI9L65Pcia9XfYLYWzD1c1V8m+L0p30y2N7MA==
dependencies:
"@types/anymatch" "*"
"@types/node" "*"
"@types/tapable" "*"
"@types/uglify-js" "*"
"@types/webpack-sources" "*"
source-map "^0.6.0"
"@types/webpack@^4.41.8":
version "4.41.17"
resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.17.tgz#0a69005e644d657c85b7d6ec1c826a71bebd1c93"
integrity sha512-6FfeCidTSHozwKI67gIVQQ5Mp0g4X96c2IXxX75hYEQJwST/i6NyZexP//zzMOBb+wG9jJ7oO8fk9yObP2HWAw==
......@@ -3402,14 +3414,14 @@ autobind-decorator@^1.3.4:
resolved "https://registry.yarnpkg.com/autobind-decorator/-/autobind-decorator-1.4.3.tgz#4c96ffa77b10622ede24f110f5dbbf56691417d1"
integrity sha1-TJb/p3sQYi7eJPEQ9du/VmkUF9E=
autoprefixer@9.8.2:
version "9.8.2"
resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.2.tgz#7347396ee576b18687041bfbacd76d78e27baa56"
integrity sha512-9UwMMU8Rg7Fj0c55mbOpXrr/2WrRqoOwOlLNTyyYt+nhiyQdIBWipp5XWzt+Lge8r3DK5y+EHMc1OBf8VpZA6Q==
autoprefixer@9.8.4:
version "9.8.4"
resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.4.tgz#736f1012673a70fa3464671d78d41abd54512863"
integrity sha512-84aYfXlpUe45lvmS+HoAWKCkirI/sw4JK0/bTeeqgHYco3dcsOn0NqdejISjptsYwNji/21dnkDri9PsYKk89A==
dependencies:
browserslist "^4.12.0"
caniuse-lite "^1.0.30001084"
kleur "^4.0.1"
caniuse-lite "^1.0.30001087"
colorette "^1.2.0"
normalize-range "^0.1.2"
num2fraction "^1.2.2"
postcss "^7.0.32"
......@@ -4012,10 +4024,10 @@ caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001043:
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001064.tgz#a0f49689119ba08943b09968e118faf3f645add0"
integrity sha512-hdBcQMFvJIrOhkpAZiRXz04Cmetwc9NekeuNl0qZfHOugxOhJKxsjF1RmISMPFjIF4PPx1reliIzbfN42EiQ5A==
caniuse-lite@^1.0.30001084:
version "1.0.30001087"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001087.tgz#4a0bdc5998a114fcf8b7954e7ba6c2c29831c54a"
integrity sha512-KAQRGtt+eGCQBSp2iZTQibdCf9oe6cNTi5lmpsW38NnxP4WMYzfU6HCRmh4kJyh6LrTM9/uyElK4xcO93kafpg==
caniuse-lite@^1.0.30001087:
version "1.0.30001088"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001088.tgz#23a6b9e192106107458528858f2c0e0dba0d9073"
integrity sha512-6eYUrlShRYveyqKG58HcyOfPgh3zb2xqs7NvT2VVtP3hEUeeWvc3lqhpeMTxYWBBeeaT9A4bKsrtjATm66BTHg==
caseless@~0.12.0:
version "0.12.0"
......@@ -4330,6 +4342,11 @@ color@^3.0.0:
color-convert "^1.9.1"
color-string "^1.5.2"
colorette@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.0.tgz#45306add826d196e8c87236ac05d797f25982e63"
integrity sha512-soRSroY+OF/8OdA3PTQXwaDJeMc7TfknKKrxeSCencL2a4+Tx5zhxmmv7hdpCjhKBjehzp8+bwe/T68K0hpIjw==
columnify@^1.5.4:
version "1.5.4"
resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb"
......@@ -8098,11 +8115,6 @@ kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3:
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
kleur@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.0.1.tgz#3d4948534b666e2578f93b6fafb62108e64f05ef"
integrity sha512-Qs6SqCLm63rd0kNVh+wO4XsWLU6kgfwwaPYsLiClWf0Tewkzsa6MvB21bespb8cz+ANS+2t3So1ge3gintzhlw==
latest-version@^5.0.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face"
......@@ -9051,9 +9063,9 @@ netmask@^1.0.6:
resolved "https://registry.yarnpkg.com/netmask/-/netmask-1.0.6.tgz#20297e89d86f6f6400f250d9f4f6b4c1945fcd35"
integrity sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU=
netron@lutzroeder/netron#9f9be2e1d0cdeb538fcddbc359f1b4138223a953:
version "4.1.9"
resolved "https://codeload.github.com/lutzroeder/netron/tar.gz/9f9be2e1d0cdeb538fcddbc359f1b4138223a953"
netron@PeterPanZH/netron:
version "4.3.5"
resolved "https://codeload.github.com/PeterPanZH/netron/tar.gz/2c04a5d19b18ec09ddb9087f99177e7d27f156bd"
dependencies:
d3 "5.16.0"
dagre "0.8.5"
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册