diff --git a/src/Primal.tsx b/src/Primal.tsx
index fe8cf56..a63aaa4 100644
--- a/src/Primal.tsx
+++ b/src/Primal.tsx
@@ -1,4 +1,4 @@
-import { useEffect, useState } from 'preact/hooks'
+import { useEffect, useMemo, useState } from 'preact/hooks'
import { MobileScrollable } from './components'
import { Katex } from './Katex'
import { fillDot, drawSemiplane, drawSimpleArrow, strokeInfiniteLine } from './lib-v2/canvas'
@@ -68,26 +68,20 @@ const PrimalStep = ({
)}
)
}
export const Primal = ({ input }: { input: ProblemInput }) => {
- const [problemOutput, setProblemOutput] = useState | null>(null)
- const [timerDelta, setTimerDelta] = useState(null)
+ const [[problemInput, problemOutput, elapsedTime], setProblem] = useState<
+ [ProblemInput, ReturnType, number] | [null, null]
+ >([null, null])
useEffect(() => {
+ console.log('Computing primal simplex steps')
+
const timerStart = performance.now()
const output = computePrimalSimplexSteps({
A: input.A,
@@ -97,13 +91,13 @@ export const Primal = ({ input }: { input: ProblemInput }) => {
maxIterations: 10,
})
const elapsedTime = performance.now() - timerStart
+ console.log('Computed primal simplex steps in', elapsedTime, 'ms')
- setProblemOutput(output)
- setTimerDelta(elapsedTime)
+ setProblem([input, output, elapsedTime])
}, [input])
return (
-
+
{problemOutput ? (
<>
@@ -111,12 +105,13 @@ export const Primal = ({ input }: { input: ProblemInput }) => {
{problemOutput.steps.map((step, iter) => (
{
)
}
-const PrimalCanvas = ({
- A,
- b,
- c,
- B,
-
- x,
- xi,
-}: {
+type PrimalCanvasProps = {
A: Matrix
b: Vector
c: Vector
@@ -152,12 +139,16 @@ const PrimalCanvas = ({
x?: Vector
xi?: Vector
-}) => {
- const render = ($canvas: HTMLCanvasElement | null) => {
+}
+
+const PrimalCanvas = ({ A, b, c, B, x, xi }: PrimalCanvasProps) => {
+ const render = ($canvas: HTMLCanvasElement | null, props: PrimalCanvasProps) => {
if (!$canvas) {
return
}
+ const { A, b, c, B, x, xi } = props
+
$canvas.width = $canvas.offsetWidth * window.devicePixelRatio
$canvas.height = $canvas.offsetHeight * window.devicePixelRatio
@@ -256,7 +247,6 @@ const PrimalCanvas = ({
})
// draw semiplanes in B
-
B.forEach(i => {
const [a1, a2] = A.rowAt(i).getData()
const b_i = b.at(i)
@@ -325,7 +315,7 @@ const PrimalCanvas = ({
g.fillText(`c`, 50 - (c1.toNumber() / cLen) * 20, height - 50 + (c2.toNumber() / cLen) * 20)
}
- return
+ return