Skip to content

Commit 0dfc14e

Browse files
committed
oracles
1 parent 9d87870 commit 0dfc14e

File tree

76 files changed

+352
-286
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

76 files changed

+352
-286
lines changed

lasso/src/components/SrmViewer/ClusteredSRMAccordionViewer.tsx

Lines changed: 50 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ import {
2222
Paper,
2323
Link,
2424
Grid,
25+
FormControlLabel,
26+
Checkbox,
2527
} from '@mui/material';
2628
import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
2729
import * as duckdb from '@duckdb/duckdb-wasm';
@@ -78,6 +80,8 @@ export const ClusteredSRMAccordionViewer: React.FC<ClusteredSRMAccordionViewerPr
7880
const [loadingState, setLoadingState] = useState<LoadingState>('unloaded');
7981
const [error, setError] = useState<string | null>(null);
8082

83+
const [limitOracles, setLimitOracles] = useState(false);
84+
8185
const [queryResponse, setQueryResponse] = useState<SearchSrmQueryResponse>()
8286

8387
const dbRef = useRef<duckdb.AsyncDuckDB>();
@@ -187,17 +191,45 @@ export const ClusteredSRMAccordionViewer: React.FC<ClusteredSRMAccordionViewerPr
187191

188192
// Clustering query (with abstraction filter)
189193
const runClusteringQuery = useCallback(
190-
async (abstractionFilter: string) => {
194+
async (abstractionFilter: string, limitOracles: boolean) => {
191195
setLoadingState('loading');
192196
setError(null);
193197
try {
194198
const db = await ensureDuckDbReady();
195199
if (!db) throw new Error('DuckDB/Parquet not loaded');
196200
const conn = await db.connect();
197201

198-
const baseSQL = `
199-
SELECT count(*) AS cluster_size, list(SYSTEMID) AS cluster_implementations, * EXCLUDE (SYSTEMID) FROM (PIVOT (SELECT CONCAT(SHEETID,'@',X, ',', Y) as statement, CONCAT(SYSTEMID,'_',VARIANTID,'_',ADAPTERID) as SYSTEMID, value from tdse_srm.parquet where type = 'value' ${abstractionFilter ? `AND ABSTRACTIONID = '${abstractionFilter.replace("'", "''")}'` : ''}) ON STATEMENT USING first(VALUE) ORDER BY SYSTEMID) as mypiv group by all order by cluster_size DESC
200-
`
202+
let baseSQL = ''
203+
if(limitOracles) {
204+
baseSQL = `WITH excluded_statements AS (
205+
SELECT SHEETID, X, Y
206+
FROM tdse_srm.parquet
207+
WHERE type = 'value'
208+
AND value = '$*'
209+
${abstractionFilter ? `AND ABSTRACTIONID = '${abstractionFilter.replace("'", "''")}'` : ''}
210+
)
211+
SELECT count(*) AS cluster_size, list(SYSTEMID) AS cluster_implementations, * EXCLUDE (SYSTEMID) FROM (
212+
PIVOT (
213+
SELECT
214+
CONCAT(SHEETID,'@',X, ',', Y) as statement,
215+
CONCAT(SYSTEMID,'_',VARIANTID,'_',ADAPTERID) as SYSTEMID,
216+
value from tdse_srm.parquet t
217+
WHERE type = 'value' AND NOT EXISTS (
218+
SELECT 1 FROM excluded_statements e
219+
WHERE t.SHEETID = e.SHEETID AND t.X = e.X AND t.Y = e.Y)
220+
${abstractionFilter ? `AND ABSTRACTIONID = '${abstractionFilter.replace("'", "''")}'` : ''})
221+
ON STATEMENT USING first(VALUE) ORDER BY SYSTEMID) as mypiv group by all order by cluster_size DESC`
222+
} else {
223+
baseSQL = `
224+
SELECT count(*) AS cluster_size, list(SYSTEMID) AS cluster_implementations, * EXCLUDE (SYSTEMID) FROM (
225+
PIVOT (
226+
SELECT
227+
CONCAT(SHEETID,'@',X, ',', Y) as statement,
228+
CONCAT(SYSTEMID,'_',VARIANTID,'_',ADAPTERID) as SYSTEMID,
229+
value from tdse_srm.parquet t
230+
WHERE type = 'value' and SYSTEMID != 'oracle' ${abstractionFilter ? `AND ABSTRACTIONID = '${abstractionFilter.replace("'", "''")}'` : ''})
231+
ON STATEMENT USING first(VALUE) ORDER BY SYSTEMID) as mypiv group by all order by cluster_size DESC`
232+
}
201233

202234
const arrowResult = await conn.query(baseSQL);
203235
const array = arrowResult.toArray().map((row: any, idx: number) => {
@@ -238,10 +270,10 @@ SELECT count(*) AS cluster_size, list(SYSTEMID) AS cluster_implementations, * EX
238270
if (!selectedAbstraction) {
239271
setSelectedAbstraction(abstractions[0]);
240272
} else {
241-
runClusteringQuery(selectedAbstraction);
273+
runClusteringQuery(selectedAbstraction, limitOracles);
242274
}
243275
// eslint-disable-next-line
244-
}, [abstractions, selectedAbstraction]);
276+
}, [abstractions, selectedAbstraction, limitOracles]);
245277

246278
// Handler for abstraction change
247279
const handleAbstractionChange = (event: any) => {
@@ -260,11 +292,11 @@ SELECT count(*) AS cluster_size, list(SYSTEMID) AS cluster_implementations, * EX
260292
<CardContent>
261293
{abstractions.length > 0 && (
262294
<FormControl sx={{ minWidth: 220 }}>
263-
<InputLabel id="abstraction-select-label">Abstraction ID</InputLabel>
295+
<InputLabel id="abstraction-select-label">Abstraction</InputLabel>
264296
<Select
265297
labelId="abstraction-select-label"
266298
value={selectedAbstraction}
267-
label="Abstraction ID"
299+
label="Abstraction"
268300
onChange={handleAbstractionChange}
269301
disabled={loadingState === 'loading'}
270302
>
@@ -274,6 +306,16 @@ SELECT count(*) AS cluster_size, list(SYSTEMID) AS cluster_implementations, * EX
274306
</MenuItem>
275307
))}
276308
</Select>
309+
<FormControlLabel
310+
control={
311+
<Checkbox
312+
checked={limitOracles}
313+
onChange={(e) => setLimitOracles(e.target.checked)}
314+
color="primary"
315+
/>
316+
}
317+
label="Include Specified Oracle Values"
318+
/>
277319
</FormControl>
278320
)}
279321
</CardContent>

lasso/src/components/SrmViewer/TestClusteredSRMAccordionViewer.tsx

Lines changed: 41 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ import {
2222
Paper,
2323
Link,
2424
Grid,
25+
FormControlLabel,
26+
Checkbox,
2527
} from '@mui/material';
2628
import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
2729
import * as duckdb from '@duckdb/duckdb-wasm';
@@ -78,6 +80,8 @@ export const TestClusteredSRMAccordionViewer: React.FC<TestClusteredSRMAccordion
7880
const [loadingState, setLoadingState] = useState<LoadingState>('unloaded');
7981
const [error, setError] = useState<string | null>(null);
8082

83+
const [limitOracles, setLimitOracles] = useState(false);
84+
8185
const [queryResponse, setQueryResponse] = useState<SearchSrmQueryResponse>()
8286

8387
const dbRef = useRef<duckdb.AsyncDuckDB>();
@@ -187,15 +191,17 @@ export const TestClusteredSRMAccordionViewer: React.FC<TestClusteredSRMAccordion
187191

188192
// Clustering query (with abstraction filter)
189193
const runClusteringQuery = useCallback(
190-
async (abstractionFilter: string) => {
194+
async (abstractionFilter: string, limitOracles: boolean) => {
191195
setLoadingState('loading');
192196
setError(null);
193197
try {
194198
const db = await ensureDuckDbReady();
195199
if (!db) throw new Error('DuckDB/Parquet not loaded');
196200
const conn = await db.connect();
197201

198-
const baseSQL = `
202+
let baseSQL = ''
203+
if(limitOracles) {
204+
baseSQL = `
199205
SELECT
200206
SHEETID,
201207
X,
@@ -205,6 +211,18 @@ SELECT
205211
(select list(CONCAT(SYSTEMID, '_', VARIANTID, '_', ADAPTERID) ORDER BY SYSTEMID, VARIANTID, ADAPTERID) from tdse_srm.parquet where VALUE = test_based_oracle and TYPE = 'value' and ABSTRACTIONID = tbl1.ABSTRACTIONID and SHEETID = tbl1.SHEETID and X = tbl1.X and Y=tbl1.Y) as cluster_implementations
206212
from tdse_srm.parquet as tbl1 where TYPE = 'value' ${abstractionFilter ? `AND ABSTRACTIONID = '${abstractionFilter.replace("'", "''")}'` : ''} and SYSTEMID != 'oracle' GROUP BY ABSTRACTIONID, SHEETID, X, Y ORDER BY SHEETID, X, Y
207213
`
214+
} else {
215+
baseSQL = `
216+
SELECT
217+
SHEETID,
218+
X,
219+
Y,
220+
MODE(VALUE) as test_based_oracle,
221+
list(DISTINCT VALUE) as unique_values,
222+
(select list(CONCAT(SYSTEMID, '_', VARIANTID, '_', ADAPTERID) ORDER BY SYSTEMID, VARIANTID, ADAPTERID) from tdse_srm.parquet where VALUE = test_based_oracle and TYPE = 'value' and SYSTEMID != 'oracle' and ABSTRACTIONID = tbl1.ABSTRACTIONID and SHEETID = tbl1.SHEETID and X = tbl1.X and Y=tbl1.Y) as cluster_implementations
223+
from tdse_srm.parquet as tbl1 where TYPE = 'value' ${abstractionFilter ? `AND ABSTRACTIONID = '${abstractionFilter.replace("'", "''")}'` : ''} and SYSTEMID != 'oracle' GROUP BY ABSTRACTIONID, SHEETID, X, Y ORDER BY SHEETID, X, Y
224+
`
225+
}
208226

209227
const arrowResult = await conn.query(baseSQL);
210228
const array = arrowResult.toArray().map((row: any, idx: number) => {
@@ -245,10 +263,10 @@ from tdse_srm.parquet as tbl1 where TYPE = 'value' ${abstractionFilter ? `AND AB
245263
if (!selectedAbstraction) {
246264
setSelectedAbstraction(abstractions[0]);
247265
} else {
248-
runClusteringQuery(selectedAbstraction);
266+
runClusteringQuery(selectedAbstraction, limitOracles);
249267
}
250268
// eslint-disable-next-line
251-
}, [abstractions, selectedAbstraction]);
269+
}, [abstractions, selectedAbstraction, limitOracles]);
252270

253271
// Handler for abstraction change
254272
const handleAbstractionChange = (event: any) => {
@@ -267,11 +285,11 @@ from tdse_srm.parquet as tbl1 where TYPE = 'value' ${abstractionFilter ? `AND AB
267285
<CardContent>
268286
{abstractions.length > 0 && (
269287
<FormControl sx={{ minWidth: 220 }}>
270-
<InputLabel id="abstraction-select-label">Abstraction ID</InputLabel>
288+
<InputLabel id="abstraction-select-label">Abstraction</InputLabel>
271289
<Select
272290
labelId="abstraction-select-label"
273291
value={selectedAbstraction}
274-
label="Abstraction ID"
292+
label="Abstraction"
275293
onChange={handleAbstractionChange}
276294
disabled={loadingState === 'loading'}
277295
>
@@ -281,6 +299,16 @@ from tdse_srm.parquet as tbl1 where TYPE = 'value' ${abstractionFilter ? `AND AB
281299
</MenuItem>
282300
))}
283301
</Select>
302+
<FormControlLabel
303+
control={
304+
<Checkbox
305+
checked={limitOracles}
306+
onChange={(e) => setLimitOracles(e.target.checked)}
307+
color="primary"
308+
/>
309+
}
310+
label="Include Specified Oracle Values"
311+
/>
284312
</FormControl>
285313
)}
286314
</CardContent>
@@ -316,16 +344,6 @@ from tdse_srm.parquet as tbl1 where TYPE = 'value' ${abstractionFilter ? `AND AB
316344
<Typography sx={{ flex: 1 }} variant="h6" component="div">
317345
{cluster.SHEETID + '@' + cluster.Y}, Size: {implementations.length}
318346
</Typography>
319-
<Box>
320-
{unique_values.slice(0, 5).map((val) => (
321-
<Chip key={val.id} label={val.id} size="small" sx={{ m: 0.5 }} />
322-
))}
323-
{unique_values.length > 5 && (
324-
<Typography variant="caption">
325-
+{unique_values.length - 5} more
326-
</Typography>
327-
)}
328-
</Box>
329347
</AccordionSummary>
330348
<AccordionDetails>
331349
{/* Optionally display other metadata */}
@@ -335,7 +353,7 @@ from tdse_srm.parquet as tbl1 where TYPE = 'value' ${abstractionFilter ? `AND AB
335353
<Table size="small">
336354
<TableHead>
337355
<TableRow>
338-
<TableCell>Test@Inovcation (Actuation Sheet)</TableCell>
356+
<TableCell>Test@Invocation (Actuation Sheet)</TableCell>
339357
<TableCell>Output</TableCell>
340358
</TableRow>
341359
</TableHead>
@@ -348,6 +366,12 @@ from tdse_srm.parquet as tbl1 where TYPE = 'value' ${abstractionFilter ? `AND AB
348366
))}
349367
</TableBody>
350368
</Table>
369+
<Typography variant="subtitle2">All Unique Values</Typography>
370+
<Box>
371+
{unique_values.map((val) => (
372+
<Chip key={val.id} label={val.id} size="small" sx={{ m: 0.5 }} />
373+
))}
374+
</Box>
351375
</Box>
352376
)}
353377
<Typography variant="subtitle2" gutterBottom>

lasso/src/components/SrmViewer/index.tsx

Lines changed: 47 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -65,53 +65,53 @@ const ALL_BUTTONS: { group: string; buttons: { label: string; sql: string }[] }[
6565
},
6666
],
6767
},
68-
{
69-
group: 'Cluster-based Voting',
70-
buttons: [
71-
{
72-
label: 'Cluster-based Voting',
73-
sql: `SELECT count(*) AS cluster_size, list(SYSTEMID) AS cluster_implementations, * EXCLUDE (SYSTEMID) FROM (PIVOT (SELECT CONCAT(SHEETID,'@',X, ',', Y) as statement, CONCAT(SYSTEMID,'_',VARIANTID,'_',ADAPTERID) as SYSTEMID, value from tdse_srm.parquet where type = 'value') ON STATEMENT USING first(VALUE) ORDER BY SYSTEMID) as mypiv group by all order by cluster_size DESC`,
74-
},
75-
{
76-
label: 'Cluster-based Voting (Ignore Create)',
77-
sql: `SELECT count(*) AS cluster_size, list(SYSTEMID) AS cluster_implementations, * EXCLUDE (SYSTEMID) FROM (PIVOT (SELECT CONCAT(SHEETID,'@',X, ',', Y) as statement, CONCAT(SYSTEMID,'_',VARIANTID,'_',ADAPTERID) as SYSTEMID, value from tdse_srm.parquet where type = 'value' and y > 0) ON STATEMENT USING first(VALUE) ORDER BY SYSTEMID) as mypiv group by all order by cluster_size DESC`,
78-
},
79-
// Test-based voting commented out in original; can uncomment if needed!
80-
],
81-
},
82-
{
83-
group: 'Test-based Oracle',
84-
buttons: [
85-
{
86-
label: 'Test-based Oracle',
87-
sql: `
88-
SELECT
89-
ABSTRACTIONID,
90-
SHEETID,
91-
X,
92-
Y,
93-
MODE(VALUE) as test_based_oracle,
94-
list(DISTINCT VALUE) as distinct_values,
95-
(select list(CONCAT(SYSTEMID, '_', VARIANTID, '_', ADAPTERID) ORDER BY SYSTEMID, VARIANTID, ADAPTERID) from tdse_srm.parquet where VALUE = test_based_oracle and TYPE = 'value' and ABSTRACTIONID = tbl1.ABSTRACTIONID and SHEETID = tbl1.SHEETID and X = tbl1.X and Y=tbl1.Y) as matches
96-
from tdse_srm.parquet as tbl1 where TYPE = 'value' and SYSTEMID != 'oracle' GROUP BY ABSTRACTIONID, SHEETID, X, Y ORDER BY SHEETID, X, Y
97-
`.trim(),
98-
},
99-
{
100-
label: 'Test-based Oracle (Ignore Create)',
101-
sql: `
102-
SELECT
103-
ABSTRACTIONID,
104-
SHEETID,
105-
X,
106-
Y,
107-
MODE(VALUE) as test_based_oracle,
108-
list(DISTINCT VALUE) as distinct_values,
109-
(select list(CONCAT(SYSTEMID, '_', VARIANTID, '_', ADAPTERID) ORDER BY SYSTEMID, VARIANTID, ADAPTERID) from tdse_srm.parquet where VALUE = test_based_oracle and TYPE = 'value' and ABSTRACTIONID = tbl1.ABSTRACTIONID and SHEETID = tbl1.SHEETID and X = tbl1.X and Y=tbl1.Y) as matches
110-
from tdse_srm.parquet as tbl1 where TYPE = 'value' and SYSTEMID != 'oracle' and Y > 0 GROUP BY ABSTRACTIONID, SHEETID, X, Y ORDER BY SHEETID, X, Y
111-
`.trim(),
112-
},
113-
],
114-
},
68+
// {
69+
// group: 'Cluster-based Voting',
70+
// buttons: [
71+
// {
72+
// label: 'Cluster-based Voting',
73+
// sql: `SELECT count(*) AS cluster_size, list(SYSTEMID) AS cluster_implementations, * EXCLUDE (SYSTEMID) FROM (PIVOT (SELECT CONCAT(SHEETID,'@',X, ',', Y) as statement, CONCAT(SYSTEMID,'_',VARIANTID,'_',ADAPTERID) as SYSTEMID, value from tdse_srm.parquet where type = 'value') ON STATEMENT USING first(VALUE) ORDER BY SYSTEMID) as mypiv group by all order by cluster_size DESC`,
74+
// },
75+
// {
76+
// label: 'Cluster-based Voting (Ignore Create)',
77+
// sql: `SELECT count(*) AS cluster_size, list(SYSTEMID) AS cluster_implementations, * EXCLUDE (SYSTEMID) FROM (PIVOT (SELECT CONCAT(SHEETID,'@',X, ',', Y) as statement, CONCAT(SYSTEMID,'_',VARIANTID,'_',ADAPTERID) as SYSTEMID, value from tdse_srm.parquet where type = 'value' and y > 0) ON STATEMENT USING first(VALUE) ORDER BY SYSTEMID) as mypiv group by all order by cluster_size DESC`,
78+
// },
79+
// // Test-based voting commented out in original; can uncomment if needed!
80+
// ],
81+
// },
82+
// {
83+
// group: 'Test-based Oracle',
84+
// buttons: [
85+
// {
86+
// label: 'Test-based Oracle',
87+
// sql: `
88+
// SELECT
89+
// ABSTRACTIONID,
90+
// SHEETID,
91+
// X,
92+
// Y,
93+
// MODE(VALUE) as test_based_oracle,
94+
// list(DISTINCT VALUE) as distinct_values,
95+
// (select list(CONCAT(SYSTEMID, '_', VARIANTID, '_', ADAPTERID) ORDER BY SYSTEMID, VARIANTID, ADAPTERID) from tdse_srm.parquet where VALUE = test_based_oracle and TYPE = 'value' and ABSTRACTIONID = tbl1.ABSTRACTIONID and SHEETID = tbl1.SHEETID and X = tbl1.X and Y=tbl1.Y) as matches
96+
// from tdse_srm.parquet as tbl1 where TYPE = 'value' and SYSTEMID != 'oracle' GROUP BY ABSTRACTIONID, SHEETID, X, Y ORDER BY SHEETID, X, Y
97+
// `.trim(),
98+
// },
99+
// {
100+
// label: 'Test-based Oracle (Ignore Create)',
101+
// sql: `
102+
// SELECT
103+
// ABSTRACTIONID,
104+
// SHEETID,
105+
// X,
106+
// Y,
107+
// MODE(VALUE) as test_based_oracle,
108+
// list(DISTINCT VALUE) as distinct_values,
109+
// (select list(CONCAT(SYSTEMID, '_', VARIANTID, '_', ADAPTERID) ORDER BY SYSTEMID, VARIANTID, ADAPTERID) from tdse_srm.parquet where VALUE = test_based_oracle and TYPE = 'value' and ABSTRACTIONID = tbl1.ABSTRACTIONID and SHEETID = tbl1.SHEETID and X = tbl1.X and Y=tbl1.Y) as matches
110+
// from tdse_srm.parquet as tbl1 where TYPE = 'value' and SYSTEMID != 'oracle' and Y > 0 GROUP BY ABSTRACTIONID, SHEETID, X, Y ORDER BY SHEETID, X, Y
111+
// `.trim(),
112+
// },
113+
// ],
114+
// },
115115
{
116116
group: 'Code Coverage (JaCoCo) - if measured by LSL Pipeline (Alternatives: BRANCH, LINE, INSTRUCTION)',
117117
buttons: [

0 commit comments

Comments
 (0)