import React, { useCallback, useEffect, useMemo, useState } from 'react'; import { Box, Button, ButtonGroup, FormControl, FormLabel, Input, InputGroup, InputLeftAddon, InputRightAddon, Spinner, Stack, Switch, } from '@chakra-ui/react'; import { GrTechnology } from 'react-icons/gr'; import Node from './Node'; import { useLoadingContext } from '../contexts/LoadingContext'; import { executeAlgorithm } from '../utils/algorithm-executor'; import TestSetFileReader from './TestSetFileReader'; import ConfusionMatrix from './ConfusionMatrix'; import { getSizeTree } from '../utils/size-checker'; import { rebuildTestTree } from '../utils/rebuilderTestTree'; /** * @typedef {import('../utils/decision-tree.js').DecisionTreeBuilder} DecisionTreeBuilder */ const logTree = root => console.log('ROOT', root); /** * @param {Object} props * @param {DecisionTreeBuilder} props.options * @param {boolean} props.headers */ const Tree = ({ options, headers }) => { // const root = useMemo(() => { // //return dt.TSPDecisionTree(options) // var t0 = performance.now(); // var r = buildDecisionTree(options); // var t1 = performance.now(); // console.log('Call to doSomething took ' + (t1 - t0) + ' milliseconds.'); // return r; // }, [options]); const [accuracyTraining, setAccuracyTraining] = useState(0); const [accuracyTest, setAccuracyTest] = useState(0); const [root, setRoot] = useState(null); const [secondRoot, setSecondRoot] = useState(null); const [sizeTree, setSizeTree] = useState({ joints: 0, leafs: 0 }); const [testSet, setTestSet] = useState(null); const [showTestTree, setShowTestTree] = useState(false); const { isLoading, setIsLoading } = useLoadingContext(); // const updateTestTree = useCallback( // newRoot => { // console.log(options.categoryAttr); // let tmpRoot = JSON.parse(JSON.stringify(newRoot)); // if (testSet == null) { // rebuildTestTree(tmpRoot, options.trainingSet, options.categoryAttr); // console.log(tmpRoot); // setSecondRoot(tmpRoot); // } else { // rebuildTestTree(tmpRoot, testSet, options.categoryAttr); // //console.log(tmpRoot); // setSecondRoot(tmpRoot); // } // }, // [options.categoryAttr, options.trainingSet, testSet] // ); useEffect(() => { setRoot(null); setIsLoading(true); setTestSet(null); let terminated = false; executeAlgorithm(options) .then(value => { if (terminated) { return; } setRoot(value); updateTestTree(value); }) .catch(e => console.error(e)) .finally(() => { if (!terminated) setIsLoading(false); terminated = true; }); return () => { if (terminated) { return; } terminated = true; }; }, [options, setIsLoading]); useEffect(() => { if (root !== null) { setSizeTree(getSizeTree(root)); } }, [root]); const requestChildChange = newRoot => { setRoot(newRoot); updateTestTree(newRoot); }; function handleGetTestSet({ data }) { setTestSet(data); } function updateTestTree(newRoot) { console.log(options.categoryAttr); let tmpRoot = JSON.parse(JSON.stringify(newRoot)); if (testSet == null) { rebuildTestTree(tmpRoot, options.trainingSet, options.categoryAttr); console.log(tmpRoot); setSecondRoot(tmpRoot); } else { rebuildTestTree(tmpRoot, testSet, options.categoryAttr); //console.log(tmpRoot); setSecondRoot(tmpRoot); } } function handleShowTestTree(e) { //console.log(e); setShowTestTree(e.target.checked); updateTestTree(root); } return (
No tree to show
) : (