Skip to content

Commit

Permalink
Merge branch 'ParthErrorExplanation'
Browse files Browse the repository at this point in the history
  • Loading branch information
parthrdesai committed Jan 11, 2025
2 parents 0d220f7 + 1a88fb4 commit 46c918f
Show file tree
Hide file tree
Showing 6 changed files with 138 additions and 23 deletions.
5 changes: 2 additions & 3 deletions server/log-server.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,14 @@ const express = require('express');
const bodyParser = require('body-parser');
const { log: logCallback } = require('./tool-server'); // Import the callback
const cors = require('cors'); // Import cors

const argv = require('minimist')(process.argv.slice(2)); // Parse command-line arguments

const app = express();
const PORT = 8003;
const PORT = process.env.PORT || argv.port || 8003; // Use --port argument, environment variable, or default

app.use(cors()); // Enable CORS
app.use(bodyParser.json()); // Parse incoming JSON requests


// Use logCallback for the /log endpoint
app.post('/log', logCallback);

Expand Down
13 changes: 13 additions & 0 deletions server/log-server.service.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
[Unit]
Description=Logging Server
After=network.target

[Service]
ExecStart=node log-server.js --port 8003
WorkingDirectory=/path/to/server *UPDATE*
Restart=always
User=your-username *UPDATE*
Environment=NODE_ENV=production

[Install]
WantedBy=multi-user.target
49 changes: 47 additions & 2 deletions server/logs.txt
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,50 @@
{"sessionId":"1731620636172","expression":"x","timestamp":"11/14/2024, 2:44:00 PM"}
{"sessionId":"1731620636172","expression":"x","timestamp":"11/14/2024, 2:51:16 PM"}
{"sessionId":"1731620636172","expression":"1","timestamp":"11/14/2024, 2:51:33 PM"}
{"sessionId":"1731623158430","expression":"sqrt(x + 1) - sqrt(x)","timestamp":"11/14/2024, 3:25:58 PM"}
{"sessionId":"1731623158430","expression":"sqrt(x + 1) - sqrt(x)","timestamp":"11/14/2024, 3:26:15 PM"}
{"sessionId":"1732219678210","expression":"sqrt(x + 1) - sqrt(x)","timestamp":"11/21/2024, 1:19:48 PM"}
{"sessionId":"1732219678210","SelectedPoint":[5737995.8262786865],"SelectedExpression":"sqrt(x + 1) - sqrt(x)","timestamp":"11/21/2024, 1:19:51 PM"}
{"sessionId":"1732219678210","expression":"sqrt(x + 1) - sqrt(x)","timestamp":"11/21/2024, 1:24:36 PM"}
{"sessionId":"1732219678210","SelectedPoint":[565670429.3497314],"SelectedExpression":"sqrt(x + 1) - sqrt(x)","timestamp":"11/21/2024, 1:24:39 PM"}
{"sessionId":"1732219678210","expression":"1.0 / (sqrt(x) + sqrt(1.0 + x))","timestamp":"11/21/2024, 1:24:43 PM"}
{"sessionId":"1732219678210","expression":"((sqrt(x + 1.0) - sqrt(x)) <= 0.05) ? (sqrt(pow(x, -1.0)) * 0.5) : fma(fma(-0.125, x, 0.5), x, 1.0 - sqrt(x))","timestamp":"11/21/2024, 1:24:44 PM"}
{"sessionId":"1732219678210","expression":"(x <= 66000000.0) ? (sqrt(x + 1.0) - sqrt(x)) : (sqrt(pow(x, -1.0)) * 0.5)","timestamp":"11/21/2024, 1:24:44 PM"}
{"sessionId":"1732219678210","expression":"((sqrt(x + 1.0) - sqrt(x)) <= 0.05) ? (0.5 / sqrt(x)) : fma(fma(-0.125, x, 0.5), x, 1.0 - sqrt(x))","timestamp":"11/21/2024, 1:24:44 PM"}
{"sessionId":"1732219678210","expression":"((sqrt(x + 1.0) - sqrt(x)) <= 0.05) ? (0.5 / sqrt(x)) : fma(0.5, x, 1.0 - sqrt(x))","timestamp":"11/21/2024, 1:24:44 PM"}
{"sessionId":"1732219678210","expression":"fma(0.5, x, 1.0 - sqrt(x))","timestamp":"11/21/2024, 1:24:44 PM"}
{"sessionId":"1732219678210","expression":"1.0 - sqrt(x)","timestamp":"11/21/2024, 1:24:45 PM"}
{"sessionId":"1732219678210","expression":"(x * x) * -0.125","timestamp":"11/21/2024, 1:24:45 PM"}
{"sessionId":"1732221109342","expression":"sqrt(x + 1) - sqrt(x)","Description":"Added Expression from the home page","timestamp":"11/21/2024, 1:31:49 PM"}
{"sessionId":"1732221109342","SelectedPoint":[139665923.3595581],"SelectedExpression":"sqrt(x + 1) - sqrt(x)","Description":"Selected Point: 139665923.3595581 on Expression: sqrt(x + 1) - sqrt(x)in the Error Plot Graph","timestamp":"11/21/2024, 1:31:52 PM"}
{"sessionId":"1732221109342","SelectedPoint":[17458416833408],"SelectedExpression":"sqrt(x + 1) - sqrt(x)","Description":"Selected Point: 17458416833408 on Expression: sqrt(x + 1) - sqrt(x)in the Error Plot Graph","timestamp":"11/21/2024, 1:33:34 PM"}
{"sessionId":"1732221109342","expression":"sqrt(x + 1) - sqrt(x)","Description":"Added Expression from the home page","timestamp":"11/21/2024, 1:34:20 PM"}
{"sessionId":"1732221109342","expression":"1.0 / (sqrt(x) + sqrt(1.0 + x))","Description":"Added Expression by clicking improve","timestamp":"11/21/2024, 1:39:42 PM"}
{"sessionId":"1732221109342","expression":"((sqrt(x + 1.0) - sqrt(x)) <= 0.05) ? (sqrt(pow(x, -1.0)) * 0.5) : fma(fma(-0.125, x, 0.5), x, 1.0 - sqrt(x))","Description":"Added Expression by clicking improve","timestamp":"11/21/2024, 1:39:42 PM"}
{"sessionId":"1732221109342","expression":"(x <= 66000000.0) ? (sqrt(x + 1.0) - sqrt(x)) : (sqrt(pow(x, -1.0)) * 0.5)","Description":"Added Expression by clicking improve","timestamp":"11/21/2024, 1:39:42 PM"}
{"sessionId":"1732221109342","expression":"((sqrt(x + 1.0) - sqrt(x)) <= 0.05) ? (0.5 / sqrt(x)) : fma(fma(-0.125, x, 0.5), x, 1.0 - sqrt(x))","Description":"Added Expression by clicking improve","timestamp":"11/21/2024, 1:39:42 PM"}
{"sessionId":"1732221109342","expression":"((sqrt(x + 1.0) - sqrt(x)) <= 0.05) ? (0.5 / sqrt(x)) : fma(0.5, x, 1.0 - sqrt(x))","Description":"Added Expression by clicking improve","timestamp":"11/21/2024, 1:39:42 PM"}
{"sessionId":"1732221109342","expression":"fma(0.5, x, 1.0 - sqrt(x))","Description":"Added Expression by clicking improve","timestamp":"11/21/2024, 1:39:42 PM"}
{"sessionId":"1732221109342","expression":"1.0 - sqrt(x)","Description":"Added Expression by clicking improve","timestamp":"11/21/2024, 1:39:42 PM"}
{"sessionId":"1732221109342","expression":"(x * x) * -0.125","Description":"Added Expression by clicking improve","timestamp":"11/21/2024, 1:39:43 PM"}
{"sessionId":"1732221109342","SelectedPoint":[1.2830542030895127e-118],"SelectedExpression":"(x * x) * -0.125","Description":"Selected Point: <span style=\"color: red;\">1.2830542030895127e-118</span> on Expression: <span style=\"color: blue;\">(x * x) * -0.125</span> in the Error Plot Graph","timestamp":"11/21/2024, 1:39:50 PM"}
{"sessionId":"1732221109342","SelectedPoint":[5.058555601602289e+222],"SelectedExpression":"((sqrt(x + 1.0) - sqrt(x)) <= 0.05) ? (0.5 / sqrt(x)) : fma(0.5, x, 1.0 - sqrt(x))","Description":"Selected Point: <span style=\"color: red;\">5.058555601602289e+222</span> on Expression: <span style=\"color: blue;\">((sqrt(x + 1.0) - sqrt(x)) <= 0.05) ? (0.5 / sqrt(x)) : fma(0.5, x, 1.0 - sqrt(x))</span> in the Error Plot Graph","timestamp":"11/21/2024, 1:39:52 PM"}
{"sessionId":"1732221109342","SelectedPoint":[1.9672965776912473e-97],"SelectedExpression":"((sqrt(x + 1.0) - sqrt(x)) <= 0.05) ? (0.5 / sqrt(x)) : fma(0.5, x, 1.0 - sqrt(x))","Description":"Selected Point: <span style=\"color: red;\">1.9672965776912473e-97</span> on Expression: <span style=\"color: blue;\">((sqrt(x + 1.0) - sqrt(x)) <= 0.05) ? (0.5 / sqrt(x)) : fma(0.5, x, 1.0 - sqrt(x))</span> in the Error Plot Graph","timestamp":"11/21/2024, 1:39:55 PM"}
{"sessionId":"1732221109342","SelectedPoint":[147.52722029059078],"SelectedExpression":"((sqrt(x + 1.0) - sqrt(x)) <= 0.05) ? (0.5 / sqrt(x)) : fma(0.5, x, 1.0 - sqrt(x))","Description":"Selected Point: <span style=\"color: red;\">147.52722029059078</span> on Expression: <span style=\"color: blue;\">((sqrt(x + 1.0) - sqrt(x)) <= 0.05) ? (0.5 / sqrt(x)) : fma(0.5, x, 1.0 - sqrt(x))</span> in the Error Plot Graph","timestamp":"11/21/2024, 1:39:58 PM"}
{"sessionId":"1732221109342","SelectedPoint":[3.891960031301046e+36],"SelectedExpression":"fma(0.5, x, 1.0 - sqrt(x))","Description":"Selected Point: <span style=\"color: red;\">3.891960031301046e+36</span> on Expression: <span style=\"color: blue;\">fma(0.5, x, 1.0 - sqrt(x))</span> in the Error Plot Graph","timestamp":"11/21/2024, 1:40:01 PM"}
{"sessionId":"1732221109342","expression":"sqrt(x + 1) - sqrt(x)","Description":"Added Expression from the home page","timestamp":"11/21/2024, 1:40:33 PM"}
{"sessionId":"1732221109342","SelectedPoint":[56210012209.375],"SelectedExpression":"sqrt(x + 1) - sqrt(x)","Description":"Selected Point: 56210012209.375 on Expression: sqrt(x + 1) - sqrt(x)in the Error Plot Graph","timestamp":"11/21/2024, 1:40:35 PM"}
{"sessionId":"1732221109342","SelectedPoint":[1.3327288321031598e+73],"SelectedExpression":"sqrt(x + 1) - sqrt(x)","Description":"Selected Point: 1.3327288321031598e+73 on Expression: sqrt(x + 1) - sqrt(x)in the Error Plot Graph","timestamp":"11/21/2024, 1:40:42 PM"}
{"sessionId":"1732221109342","SelectedPoint":[565670429.3497314],"SelectedExpression":"sqrt(x + 1) - sqrt(x)","Description":"Selected Point: 565670429.3497314 on Expression: sqrt(x + 1) - sqrt(x)in the Error Plot Graph","timestamp":"11/21/2024, 1:40:57 PM"}
{"sessionId":"1732221109342","SelectedPoint":[1.0773502752895718e+194],"SelectedExpression":"sqrt(x + 1) - sqrt(x)","Description":"Selected Point: 1.0773502752895718e+194 on Expression: sqrt(x + 1) - sqrt(x)in the Error Plot Graph","timestamp":"11/21/2024, 1:41:35 PM"}
{"sessionId":"1732221109342","expression":"1.0 / (sqrt(x) + sqrt(1.0 + x))","Description":"Added Expression by clicking improve","timestamp":"11/21/2024, 1:41:47 PM"}
{"sessionId":"1732221109342","expression":"((sqrt(x + 1.0) - sqrt(x)) <= 0.05) ? (sqrt(pow(x, -1.0)) * 0.5) : fma(fma(-0.125, x, 0.5), x, 1.0 - sqrt(x))","Description":"Added Expression by clicking improve","timestamp":"11/21/2024, 1:41:48 PM"}
{"sessionId":"1732221109342","expression":"(x <= 66000000.0) ? (sqrt(x + 1.0) - sqrt(x)) : (sqrt(pow(x, -1.0)) * 0.5)","Description":"Added Expression by clicking improve","timestamp":"11/21/2024, 1:41:48 PM"}
{"sessionId":"1732221109342","expression":"((sqrt(x + 1.0) - sqrt(x)) <= 0.05) ? (0.5 / sqrt(x)) : fma(fma(-0.125, x, 0.5), x, 1.0 - sqrt(x))","Description":"Added Expression by clicking improve","timestamp":"11/21/2024, 1:41:48 PM"}
{"sessionId":"1732221109342","expression":"((sqrt(x + 1.0) - sqrt(x)) <= 0.05) ? (0.5 / sqrt(x)) : fma(0.5, x, 1.0 - sqrt(x))","Description":"Added Expression by clicking improve","timestamp":"11/21/2024, 1:41:49 PM"}
{"sessionId":"1732221109342","expression":"fma(0.5, x, 1.0 - sqrt(x))","Description":"Added Expression by clicking improve","timestamp":"11/21/2024, 1:41:49 PM"}
{"sessionId":"1732221109342","expression":"1.0 - sqrt(x)","Description":"Added Expression by clicking improve","timestamp":"11/21/2024, 1:41:50 PM"}
{"sessionId":"1732221109342","expression":"(x * x) * -0.125","Description":"Added Expression by clicking improve","timestamp":"11/21/2024, 1:41:50 PM"}
{"sessionId":"1732221109342","SelectedPoint":[1.790720856022474e-113],"SelectedExpression":"(x * x) * -0.125","Description":"Selected Point: 1.790720856022474e-113 on Expression: (x * x) * -0.125in the Error Plot Graph","timestamp":"11/21/2024, 1:42:00 PM"}
{"sessionId":"1732227296730","SelectedPoint":[4.157624451838404e-7],"SelectedExpression":"x+1","Description":"Selected Point: 4.157624451838404e-7 on Expression: x+1in the Error Plot Graph","timestamp":"11/21/2024, 3:17:15 PM"}
{"sessionId":"1732227296730","SelectedPoint":[256948.0041514933],"SelectedExpression":"sqrt(x + 1) - sqrt(x)","Description":"Selected Point: 256948.0041514933 on Expression: sqrt(x + 1) - sqrt(x)in the Error Plot Graph","timestamp":"11/21/2024, 3:17:21 PM"}
{"sessionId":"1732227296730","SelectedPoint":[1.5288835798884202e-16],"SelectedExpression":"x+1","Description":"Selected Point: 1.5288835798884202e-16 on Expression: x+1in the Error Plot Graph","timestamp":"11/21/2024, 3:18:24 PM"}
{"sessionId":"1732227296730","expression":"sqrt(x + 1) - sqrt(x)","Description":"Added Expression from the home page","timestamp":"11/21/2024, 3:27:29 PM"}
71 changes: 54 additions & 17 deletions src/herbie/ErrorPlot.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -407,35 +407,72 @@ function ErrorPlot() {
svg.innerHTML = ''
const plot = await plotError({
varnames,
varidx: i,
ticks: ticksByVarIdx[i],
splitpoints: splitpointsByVarIdx[i],
// get the data for the current variable
// data is stored as exprData -> varData -> Point[], so:
data,
bits,
styles,
width: width,
height: 300
});
varidx: i,
ticks: ticksByVarIdx[i],
splitpoints: splitpointsByVarIdx[i],
// get the data for the current variable
// data is stored as exprData -> varData -> Point[], so:
data,
bits,
styles,
width: width,
height: 300
});

// Prepping variables to layer selected point label on top of graph
let labelContainer, labelPoint, labelPointBorder: undefined | SVGElement = undefined;
// Prepping variables to layer selected point label on top of graph
let labelContainer, labelPoint, labelPointBorder: undefined | SVGElement = undefined;

plot.querySelectorAll('[aria-label="dot"] circle title').forEach((t: any) => {
const { o, id }: {o : ordinal[], id: number} = JSON.parse(t.textContent)
plot.querySelectorAll('[aria-label="dot"] circle title').forEach((t: any) => {
const { o, id }: {o : ordinal[], id: number} = JSON.parse(t.textContent)

const c = t.parentNode
const point = o.map((v: ordinal) => ordinals.ordinalToFloat(v))
const c = t.parentNode
const point = o.map((v: ordinal) => ordinals.ordinalToFloat(v))
c.onclick = async () => {
if (jobCount > 0) { // there are pending jobs
return;
}

setSelectedPoint(point)
setSelectedExprId(id)
// remove brushing,
// TODO: would we rather layer? (unselect point would return to whatever previous state was: un/brushed)
setSelectedSubset(undefined)

fetch('http://localhost:8003/log', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
sessionId: sessionStorage.getItem('sessionId'),
SelectedPoint: point,
SelectedExpression: expressions.find(e => e.id === id)?.text,
Description: `Selected Point: ${point} on Expression: ${expressions.find(e => e.id === id)?.text}in the Error Plot Graph`,
timestamp: new Date().toLocaleString(),
}),
})
.then(response => {
if (response.ok) {
console.log('Server is running and log saved');
}
else {
console.error('Server responded with an error:', response.status);
}
})
.catch(error => console.error('Request failed:', error));
}

// Compare the selectedPoint's bucket to that of the given point
const compareBuckets = () => {
if (selectedPoint) {
const expIdx = compareExpressions.map((e, i) => ([e,i] as [Expression, number])).filter(([e,i]) => e.id === id)[0][1];

const pIdx = dataPoints[expIdx].indexOf(point[i]);
const selectedIdx = dataPoints[expIdx].indexOf(selectedPoint[i]);

// Make sure selected value exists in this expression before comparing
return selectedIdx !== -1 &&
// Compare idx of point to idx of head of bucket that would contain selected point
pIdx === selectedIdx - (selectedIdx % Math.floor(dataPoints[expIdx].length / width));
}
}

// See if the current point is selected, if not check if it belongs to the same bucket
Expand Down
22 changes: 21 additions & 1 deletion src/herbie/ExpressionTable.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,7 @@ function ExpressionTable() {
body: JSON.stringify({
sessionId: sessionStorage.getItem('sessionId'),
expression: addExpression,
Description: "Added Expression by clicking Add button",
timestamp: new Date().toLocaleString(),
}),
})
Expand Down Expand Up @@ -245,7 +246,26 @@ function ExpressionTable() {
const tex = await expressionToTex(fPCoreToMathJS, fpcore.getVarnamesMathJS(fPCoreToMathJS).length, serverUrl);
const newExpression = new Expression(fPCoreToMathJS, newId, spec.id, tex);
newExpressions.push(newExpression);


fetch('http://localhost:8003/log', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
sessionId: sessionStorage.getItem('sessionId'),
expression: fPCoreToMathJS,
Description: "Added Expression by clicking improve",
timestamp: new Date().toLocaleString(),
}),
})
.then(response => {
if (response.ok) {
console.log('Server is running and log saved');
}
else {
console.error('Server responded with an error:', response.status);
}
})
.catch(error => console.error('Request failed:', error));
// The following code assumes the HTMLHistory[] returend by Herbie
// is mapped to the alternatives array 1:1
const d = histories[i];
Expand Down
1 change: 1 addition & 0 deletions src/herbie/SpecComponent.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,7 @@ function SpecConfigComponent() {
body: JSON.stringify({
sessionId: sessionStorage.getItem('sessionId'),
expression: spec.expression,
Description: "Added Expression from the home page",
timestamp: new Date().toLocaleString(),
}),
})
Expand Down

0 comments on commit 46c918f

Please sign in to comment.