Noisy Row Program Crystallizer
The one idea you need
Picture a hasty clerk reformatting every entry in a list, typing each one a little differently each pass. This hunts for a single fixed recipe that fits the four entries you can check and best matches the clerk's noisy retypes on all the rest.
The question
If a model gives messy, inconsistent answers for each row of a text-cleanup task, can you boil those guesses into one clean rule that solves the whole task?
What we found
No. Keeping the model's direct per-row answers fully solved half of the 40 tasks, while distilling those noisy answers into one fixed rule solved just 22.5% — worse even than a scrambled comparison at 25%. And a flawless rule-picker tops out at 27.5%, because for most tasks no short rule both fits the visible samples and holds on the rest.
Why it matters
For per-row text cleanup, trust and vote among the model's direct answers. A single rigid rule is all-or-nothing, and the narrow library of rules caps you below direct answering — reach for a rule only when a simple one truly exists.
On this page
Results at a glance 8
How to read
Each bar is one method; height is the share of 40 tasks fully solved, taller is better. Left bars keep the model's direct per-row answers; right bars force those answers into a single fixed rule.
Takeaway → Every direct-answer bar towers over every single-rule bar, and the rule bars even dip below a scrambled comparison, so distilling into a rule hurts.
Data table
| method | full-task exact |
|---|---|
| row-candidate oracle | 62.5% |
| direct greedy rows | 50% |
| row majority vote | 50% |
| pseudo-program + direct fallback | 50% |
| program oracle | 27.5% |
| examples-only shortest program | 25% |
| shuffled-support control | 25% |
| candidate-support program | 22.5% |
| pseudo-program table | 17.5% |
| shuffled-pseudo control | 0% |
Numbers from experiments/qwen_noisy_row_program_crystallizer/analysis/summary.csv
Technical framing
Crystallizing rows into one program loses to just using the rows (full-task exact, 40 tasks) — Selecting a deterministic program via candidate support (22.5%) is far below direct greedy row inference (50%) and even below its shuffled control (25%).
How to read
Two bars per method: share of individual rows correct and share of whole tasks correct, taller is better. Direct-answer methods sit left, fixed-rule methods and the best-possible pick to the right.
Takeaway → Direct answers get most rows right but fewer whole tasks; a rule is all-or-nothing, flattening both to the same low level.
Data table
| method | row exact | full-task exact |
|---|---|---|
| direct greedy rows | 72.3% | 50% |
| row majority vote | 72.7% | 50% |
| candidate-support program | 27.1% | 22.5% |
| program oracle | 27.5% | 27.5% |
| row-candidate oracle | 62.5% | 62.5% |
Numbers from experiments/qwen_noisy_row_program_crystallizer/analysis/summary.csv
Technical framing
Row-level vs strict full-task accuracy: programs are exact or nothing, direct rows are partially right — Direct row inference gets 72% of individual rows right but only 50% of whole tasks; program methods collapse both to the same low rate.
How to read
Each bar is a step; height is tasks solved out of 40, taller is better. Top bars are best-possible ceilings; lower bars are what building a rule actually reaches.
Takeaway → A fixed rule even exists for only 11 of 40 tasks, below the 20 the direct answers already solve, so the rule library is the bottleneck.
Data table
| stage | tasks solved |
|---|---|
| some row candidate is correct (oracle) | 25 |
| direct greedy rows | 20 |
| pseudo-program + direct fallback | 20 |
| train-fitting program exists (oracle) | 11 |
| candidate-support selection | 9 |
| pseudo-program selector alone | 7 |
Technical framing
Program headroom: how many of 40 tasks each stage can solve — The DSL itself is the bottleneck: only 11 of 40 tasks even have a train-fitting deterministic program, below the 20 direct inference already solves.
How to read
Task types with their counts run along the axis; paired bars compare using the model's answers directly against forcing them into one rule, taller is better.
Takeaway → On the two biggest types the rule collapses far below direct — date tasks fall from 56% to 13% — tying only on tiny, trivially rule-like types.
Data table
| task family (count) | direct greedy rows | candidate-support program |
|---|---|---|
| DateTime (16) | 56.2% | 12.5% |
| Number (10) | 30% | 20% |
| Address (2) | 0% | 0% |
| City (2) | 50% | 0% |
| Phone (2) | 100% | 100% |
Numbers from experiments/qwen_noisy_row_program_crystallizer/analysis/family_summary.csv
Technical framing
Per-family full-task exact: crystallization hurts most on DateTime and Number, the biggest families — Crystallization only matches direct inference on trivially programmatic families like Phone; it collapses on DateTime (56% to 12.5%).
How to read
Two rule-picking methods on the axis; for each, one bar for the real signal and one for a scrambled control, taller is better. A genuine method should beat its scramble.
Takeaway → One method beats its scramble (17.5% vs 0%), but the candidate-vote method ties or trails its scramble (22.5% vs 25%), so its signal is not real.
Data table
| Crystallization method | Real support signal | Shuffled-support control |
|---|---|---|
| Candidate-support program | 22.5% | 25% |
| Pseudo-label program table | 17.5% | 0% |
Numbers from experiments/qwen_noisy_row_program_crystallizer/analysis/summary.csv
Technical framing
Shuffle controls: pseudo-label selection is a real signal, candidate-support voting is not — Shuffling destroys pseudo-label selection (17.5% to 0%) but candidate-support does no better than its shuffled control.
How to read
Task types on the axis; three bars each — best answer anywhere in the sample pool, a table-wide best, and the model's direct pick — taller is better.
Takeaway → On number tasks a correct answer sits in the pool 70% of the time but direct picking lands only 30% — real recoverable room the rule fails to capture.
Data table
| Task family | Row-candidate oracle (best answer in pool) | Table-candidate oracle | Direct greedy rows |
|---|---|---|---|
| DateTime (16 tasks) | 62.5% | 62.5% | 56.2% |
| Number (10) | 70% | 60% | 30% |
| City (2) | 50% | 50% | 50% |
| Address (2) | 0% | 0% | 0% |
Numbers from experiments/qwen_noisy_row_program_crystallizer/analysis/family_summary.csv
Technical framing
Oracle ceiling vs greedy decoding by family: the recoverable headroom is in Number tasks — On Number tasks the sampled pool contains a fully correct answer 70% of the time but greedy only solves 30%; Address is unreachable either way.
How to read
Each bar is one task where candidate voting swapped in a different rule; height is how much of the answer pool backed the winner. All ten shown were wrong on the hidden rows.
Takeaway → Vote share ranged from none to unanimous yet every pick was wrong; on one task a 71% majority even overrode a correct rule.
Data table
| Task where support changed the selected program | Vote share of support-selected program (strictly wrong on hidden rows) |
|---|---|
| Address.000002 | 0% |
| City.000011 | 64.3% |
| DateTime.000051 | 0% |
| DateTime.000081 | 16.7% |
| DateTime.000115 | 100% |
| Gender.000001 | 90.5% |
| Number.000043 | 0% |
| Number.000077 | 57.1% |
| ShippingCode.000008 | 0% |
| BillingCode.000007 | 71.4% |
Numbers from report table (Candidate-Support Changes, reports/qwen_noisy_row_program_crystallizer_report.md)
Technical framing
Candidate agreement does not certify correctness: vote share of the 10 support-changed picks, all wrong — Every program that candidate support swapped in was wrong, yet vote share spanned 0-100%; on BillingCode.000007 it even overrode a correct program at 71.4%.
How to read
Two run sizes on the axis; three bars each for direct answers, the best-possible rule ceiling, and the built single rule, taller is better.
Takeaway → At both sizes the rule ceiling trails direct answers, confirming the rule space itself caps performance rather than being a fluke of a small run.
Data table
| Run scale | Direct greedy rows | Program oracle | Candidate-support program |
|---|---|---|---|
| Smoke run (6 tasks) | 66.7% | 33.3% | 16.7% |
| Main run (40 tasks) | 50% | 27.5% | 22.5% |
Numbers from experiments/qwen_noisy_row_program_crystallizer/experiment_log.md
Technical framing
The crystallization loss replicates across task-set sizes (6-task smoke vs 40-task main) — At both 6 and 40 tasks, even the best train-fitting program trails direct rows, so the program space itself is the ceiling.
In the author’s words from the Report · “Interpretation”
Candidate support changes strict full-task exactness by -27.5 points relative to direct greedy row inference and by -2.5 points relative to the shortest train-fitting deterministic program. The shuffled-support control is separated by -2.5 points. The pseudo-label crystallizer reaches 17.5% as a pure table selector and 50.0% with conservative direct fallback. Its shuffled-pseudo control reaches 0.0%. The deterministic train-fitting program oracle solves 27.5% of tasks and the row-candidate oracle solves 62.5%. Relative to the direct-to-program oracle gap, candidate-support gap capture is not defined because the deterministic-program oracle is below the direct row baseline.
Overview
Standalone experiment directory for candidate-supported deterministic program selection.
Report
Rendered from reports/qwen_noisy_row_program_crystallizer_report.md
Question
Can noisy row-level candidate outputs be crystallized into one deterministic program for an entire text-transformation task?
The experiment uses the language model only to propose row outputs. It then enumerates deterministic programs that exactly match the visible examples and selects the program whose held-out predictions receive the strongest support from the row-candidate pool. Hidden outputs are used only for evaluation and oracle diagnostics.
Setup
- Run:
main_final - Dataset: public text-transformation tasks.
- Tasks:
40 - Visible examples per task:
4 - Held-out cap per task:
6 - Max deterministic programs enumerated per task:
40000 - Max candidate tables per task:
32 - Pseudo-program support threshold for fallback:
0.75 - Row-candidate rows used:
1428
Main Result
| method | tasks | row_exact | full_task_exact |
|---|---|---|---|
| row_candidate_oracle | 40 | 62.5% | 62.5% |
| table_candidate_oracle | 40 | 60.0% | 60.0% |
| direct_row_greedy | 40 | 72.3% | 50.0% |
| row_majority | 40 | 72.7% | 50.0% |
| pseudo_program_or_direct | 40 | 72.3% | 50.0% |
| program_oracle | 40 | 27.5% | 27.5% |
| examples_shortest_program | 40 | 25.0% | 25.0% |
| shuffled_support_program | 40 | 28.7% | 25.0% |
| candidate_support_program | 40 | 27.1% | 22.5% |
| pseudo_program_table | 40 | 19.2% | 17.5% |
| shuffled_pseudo_program_table | 40 | 0.0% | 0.0% |
Interpretation
Candidate support changes strict full-task exactness by -27.5 points relative to direct greedy row inference and by -2.5 points relative to the shortest train-fitting deterministic program. The shuffled-support control is separated by -2.5 points.
The pseudo-label crystallizer reaches 17.5% as a pure table selector and 50.0% with conservative direct fallback. Its shuffled-pseudo control reaches 0.0%.
The deterministic train-fitting program oracle solves 27.5% of tasks and the row-candidate oracle solves 62.5%. Relative to the direct-to-program oracle gap, candidate-support gap capture is not defined because the deterministic-program oracle is below the direct row baseline.
Diagnostics
- Direct row inference solves
20of40tasks. - A deterministic train-fitting program can solve
11of40tasks. - Candidate-support selection solves
9of40tasks. - Pseudo-label crystallization solves
7tasks as a pure selector and20with direct fallback. - The direct fallback uses the pseudo-program table on
8tasks. - There are
4direct-missed tasks with a hidden-valid deterministic program; candidate support captures2of them. - Candidate support changes the selected program on
10tasks:0helped and1hurt on strict full-task exactness.
Charts






Family Breakdown
| method | family | tasks | row_exact | full_task_exact |
|---|---|---|---|---|
| candidate_support_program | Address | 2 | 0.0% | 0.0% |
| candidate_support_program | BillingCode | 1 | 33.3% | 0.0% |
| candidate_support_program | City | 2 | 25.0% | 0.0% |
| candidate_support_program | Column | 1 | 0.0% | 0.0% |
| candidate_support_program | DateTime | 16 | 12.5% | 12.5% |
| candidate_support_program | FilePath | 1 | 100.0% | 100.0% |
| candidate_support_program | Gender | 1 | 66.7% | 0.0% |
| candidate_support_program | Language | 1 | 100.0% | 100.0% |
| candidate_support_program | Name | 1 | 100.0% | 100.0% |
| candidate_support_program | Number | 10 | 23.3% | 20.0% |
| candidate_support_program | Phone | 2 | 100.0% | 100.0% |
| candidate_support_program | ShippingCode | 1 | 0.0% | 0.0% |
| candidate_support_program | UserAgent | 1 | 0.0% | 0.0% |
| direct_row_greedy | Address | 2 | 50.0% | 0.0% |
| direct_row_greedy | BillingCode | 1 | 33.3% | 0.0% |
| direct_row_greedy | City | 2 | 87.5% | 50.0% |
| direct_row_greedy | Column | 1 | 100.0% | 100.0% |
| direct_row_greedy | DateTime | 16 | 72.9% | 56.2% |
| direct_row_greedy | FilePath | 1 | 100.0% | 100.0% |
| direct_row_greedy | Gender | 1 | 66.7% | 0.0% |
| direct_row_greedy | Language | 1 | 100.0% | 100.0% |
| direct_row_greedy | Name | 1 | 100.0% | 100.0% |
| direct_row_greedy | Number | 10 | 61.7% | 30.0% |
| direct_row_greedy | Phone | 2 | 100.0% | 100.0% |
| direct_row_greedy | ShippingCode | 1 | 33.3% | 0.0% |
| direct_row_greedy | UserAgent | 1 | 100.0% | 100.0% |
| examples_shortest_program | Address | 2 | 0.0% | 0.0% |
| examples_shortest_program | BillingCode | 1 | 100.0% | 100.0% |
| examples_shortest_program | City | 2 | 0.0% | 0.0% |
| examples_shortest_program | Column | 1 | 0.0% | 0.0% |
| examples_shortest_program | DateTime | 16 | 12.5% | 12.5% |
| examples_shortest_program | FilePath | 1 | 100.0% | 100.0% |
| examples_shortest_program | Gender | 1 | 0.0% | 0.0% |
| examples_shortest_program | Language | 1 | 100.0% | 100.0% |
| examples_shortest_program | Name | 1 | 100.0% | 100.0% |
| examples_shortest_program | Number | 10 | 20.0% | 20.0% |
| examples_shortest_program | Phone | 2 | 100.0% | 100.0% |
| examples_shortest_program | ShippingCode | 1 | 0.0% | 0.0% |
| examples_shortest_program | UserAgent | 1 | 0.0% | 0.0% |
| program_oracle | Address | 2 | 0.0% | 0.0% |
| program_oracle | BillingCode | 1 | 100.0% | 100.0% |
| program_oracle | City | 2 | 0.0% | 0.0% |
| program_oracle | Column | 1 | 0.0% | 0.0% |
| program_oracle | DateTime | 16 | 12.5% | 12.5% |
| program_oracle | FilePath | 1 | 100.0% | 100.0% |
| program_oracle | Gender | 1 | 0.0% | 0.0% |
| program_oracle | Language | 1 | 100.0% | 100.0% |
| program_oracle | Name | 1 | 100.0% | 100.0% |
| program_oracle | Number | 10 | 30.0% | 30.0% |
| program_oracle | Phone | 2 | 100.0% | 100.0% |
| program_oracle | ShippingCode | 1 | 0.0% | 0.0% |
| program_oracle | UserAgent | 1 | 0.0% | 0.0% |
| pseudo_program_or_direct | Address | 2 | 50.0% | 0.0% |
| pseudo_program_or_direct | BillingCode | 1 | 33.3% | 0.0% |
| pseudo_program_or_direct | City | 2 | 87.5% | 50.0% |
| pseudo_program_or_direct | Column | 1 | 100.0% | 100.0% |
| pseudo_program_or_direct | DateTime | 16 | 72.9% | 56.2% |
| pseudo_program_or_direct | FilePath | 1 | 100.0% | 100.0% |
| pseudo_program_or_direct | Gender | 1 | 66.7% | 0.0% |
| pseudo_program_or_direct | Language | 1 | 100.0% | 100.0% |
| pseudo_program_or_direct | Name | 1 | 100.0% | 100.0% |
| pseudo_program_or_direct | Number | 10 | 61.7% | 30.0% |
| pseudo_program_or_direct | Phone | 2 | 100.0% | 100.0% |
| pseudo_program_or_direct | ShippingCode | 1 | 33.3% | 0.0% |
| pseudo_program_or_direct | UserAgent | 1 | 100.0% | 100.0% |
| pseudo_program_table | Address | 2 | 0.0% | 0.0% |
| pseudo_program_table | BillingCode | 1 | 33.3% | 0.0% |
| pseudo_program_table | City | 2 | 0.0% | 0.0% |
| pseudo_program_table | Column | 1 | 0.0% | 0.0% |
| pseudo_program_table | DateTime | 16 | 12.5% | 12.5% |
| pseudo_program_table | FilePath | 1 | 100.0% | 100.0% |
| pseudo_program_table | Gender | 1 | 0.0% | 0.0% |
| pseudo_program_table | Language | 1 | 100.0% | 100.0% |
| pseudo_program_table | Name | 1 | 100.0% | 100.0% |
| pseudo_program_table | Number | 10 | 3.3% | 0.0% |
| pseudo_program_table | Phone | 2 | 100.0% | 100.0% |
| pseudo_program_table | ShippingCode | 1 | 0.0% | 0.0% |
| pseudo_program_table | UserAgent | 1 | 0.0% | 0.0% |
| row_candidate_oracle | Address | 2 | 0.0% | 0.0% |
| row_candidate_oracle | BillingCode | 1 | 0.0% | 0.0% |
| row_candidate_oracle | City | 2 | 50.0% | 50.0% |
| row_candidate_oracle | Column | 1 | 100.0% | 100.0% |
| row_candidate_oracle | DateTime | 16 | 62.5% | 62.5% |
| row_candidate_oracle | FilePath | 1 | 100.0% | 100.0% |
| row_candidate_oracle | Gender | 1 | 0.0% | 0.0% |
| row_candidate_oracle | Language | 1 | 100.0% | 100.0% |
| row_candidate_oracle | Name | 1 | 100.0% | 100.0% |
| row_candidate_oracle | Number | 10 | 70.0% | 70.0% |
| row_candidate_oracle | Phone | 2 | 100.0% | 100.0% |
| row_candidate_oracle | ShippingCode | 1 | 0.0% | 0.0% |
| row_candidate_oracle | UserAgent | 1 | 100.0% | 100.0% |
| row_majority | Address | 2 | 50.0% | 0.0% |
| row_majority | BillingCode | 1 | 33.3% | 0.0% |
| row_majority | City | 2 | 87.5% | 50.0% |
| row_majority | Column | 1 | 100.0% | 100.0% |
| row_majority | DateTime | 16 | 74.0% | 56.2% |
| row_majority | FilePath | 1 | 100.0% | 100.0% |
| row_majority | Gender | 1 | 66.7% | 0.0% |
| row_majority | Language | 1 | 100.0% | 100.0% |
| row_majority | Name | 1 | 100.0% | 100.0% |
| row_majority | Number | 10 | 61.7% | 30.0% |
| row_majority | Phone | 2 | 100.0% | 100.0% |
| row_majority | ShippingCode | 1 | 33.3% | 0.0% |
| row_majority | UserAgent | 1 | 100.0% | 100.0% |
| shuffled_pseudo_program_table | Address | 2 | 0.0% | 0.0% |
| shuffled_pseudo_program_table | BillingCode | 1 | 0.0% | 0.0% |
| shuffled_pseudo_program_table | City | 2 | 0.0% | 0.0% |
| shuffled_pseudo_program_table | Column | 1 | 0.0% | 0.0% |
| shuffled_pseudo_program_table | DateTime | 16 | 0.0% | 0.0% |
| shuffled_pseudo_program_table | FilePath | 1 | 0.0% | 0.0% |
| shuffled_pseudo_program_table | Gender | 1 | 0.0% | 0.0% |
| shuffled_pseudo_program_table | Language | 1 | 0.0% | 0.0% |
| shuffled_pseudo_program_table | Name | 1 | 0.0% | 0.0% |
| shuffled_pseudo_program_table | Number | 10 | 0.0% | 0.0% |
| shuffled_pseudo_program_table | Phone | 2 | 0.0% | 0.0% |
| shuffled_pseudo_program_table | ShippingCode | 1 | 0.0% | 0.0% |
| shuffled_pseudo_program_table | UserAgent | 1 | 0.0% | 0.0% |
| shuffled_support_program | Address | 2 | 0.0% | 0.0% |
| shuffled_support_program | BillingCode | 1 | 100.0% | 100.0% |
| shuffled_support_program | City | 2 | 25.0% | 0.0% |
| shuffled_support_program | Column | 1 | 0.0% | 0.0% |
| shuffled_support_program | DateTime | 16 | 12.5% | 12.5% |
| shuffled_support_program | FilePath | 1 | 100.0% | 100.0% |
| shuffled_support_program | Gender | 1 | 66.7% | 0.0% |
| shuffled_support_program | Language | 1 | 100.0% | 100.0% |
| shuffled_support_program | Name | 1 | 100.0% | 100.0% |
| shuffled_support_program | Number | 10 | 23.3% | 20.0% |
| shuffled_support_program | Phone | 2 | 100.0% | 100.0% |
| shuffled_support_program | ShippingCode | 1 | 0.0% | 0.0% |
| shuffled_support_program | UserAgent | 1 | 0.0% | 0.0% |
| table_candidate_oracle | Address | 2 | 0.0% | 0.0% |
| table_candidate_oracle | BillingCode | 1 | 0.0% | 0.0% |
| table_candidate_oracle | City | 2 | 50.0% | 50.0% |
| table_candidate_oracle | Column | 1 | 100.0% | 100.0% |
| table_candidate_oracle | DateTime | 16 | 62.5% | 62.5% |
| table_candidate_oracle | FilePath | 1 | 100.0% | 100.0% |
| table_candidate_oracle | Gender | 1 | 0.0% | 0.0% |
| table_candidate_oracle | Language | 1 | 100.0% | 100.0% |
| table_candidate_oracle | Name | 1 | 100.0% | 100.0% |
| table_candidate_oracle | Number | 10 | 60.0% | 60.0% |
| table_candidate_oracle | Phone | 2 | 100.0% | 100.0% |
| table_candidate_oracle | ShippingCode | 1 | 0.0% | 0.0% |
| table_candidate_oracle | UserAgent | 1 | 100.0% | 100.0% |
Reachable Headroom Tasks
| task_id | family | features | direct_full_exact | examples_full_exact | support_full_exact | shuffled_full_exact | support_avg_vote_share | train_match_count | support_program | oracle_program |
|---|---|---|---|---|---|---|---|---|---|---|
| BillingCode.000007 | BillingCode | Concatenation | False | True | False | True | 71.4% | 1239 | affix['[',']'](field[,-1) | affix['',']'](COL0) |
| Number.000077 | Number | Numeric,NumericRounding | False | False | False | False | 57.1% | 687 | affix'','0') | affix'','0') |
| Number.000029 | Number | Numeric,NumericRounding | False | True | True | True | 57.1% | 617 | number_round10(COL0) | number_round10(COL0) |
| Number.000049 | Number | Numeric,NumericRounding | False | True | True | True | 14.3% | 624 | number_round100(COL0) | number_round100(COL0) |
Candidate-Support Changes
Task Details
| task_id | family | heldout_rows | train_match_count | candidate_tables | coherent_pseudo_tables | program_oracle | table_candidate_oracle | direct_full_exact | examples_full_exact | support_full_exact | pseudo_full_exact | pseudo_or_direct_full_exact | shuffled_pseudo_full_exact | pseudo_avg_vote_share |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| BillingCode.000007 | BillingCode | 3 | 1239 | 8 | 1 | True | False | False | True | False | False | False | False | 71.4% |
| Number.000077 | Number | 3 | 687 | 18 | 2 | True | True | False | False | False | False | False | False | 57.1% |
| Address.000002 | Address | 3 | 1404 | 1 | 0 | False | False | False | False | False | False | False | False | 0.0% |
| Address.000013 | Address | 6 | 1168 | 9 | 0 | False | False | False | False | False | False | False | False | 0.0% |
| City.000011 | City | 4 | 864 | 4 | 0 | False | False | False | False | False | False | False | False | 0.0% |
| DateTime.000027 | DateTime | 6 | 1026 | 32 | 0 | False | False | False | False | False | False | False | False | 0.0% |
| DateTime.000051 | DateTime | 3 | 1051 | 4 | 0 | False | False | False | False | False | False | False | False | 0.0% |
| DateTime.000076 | DateTime | 6 | 568 | 6 | 0 | False | True | False | False | False | False | False | False | 0.0% |
| DateTime.000081 | DateTime | 6 | 750 | 6 | 0 | False | False | False | False | False | False | False | False | 0.0% |
| DateTime.000114 | DateTime | 6 | 862 | 32 | 0 | False | False | False | False | False | False | False | False | 0.0% |
| DateTime.000115 | DateTime | 6 | 1327 | 1 | 1 | False | False | False | False | False | False | False | False | 100.0% |
| DateTime.000116 | DateTime | 6 | 907 | 1 | 0 | False | False | False | False | False | False | False | False | 0.0% |
| Gender.000001 | Gender | 3 | 540 | 3 | 0 | False | False | False | False | False | False | False | False | 0.0% |
| Number.000008 | Number | 6 | 768 | 8 | 0 | False | False | False | False | False | False | False | False | 0.0% |
| Number.000015 | Number | 6 | 691 | 32 | 0 | False | False | False | False | False | False | False | False | 0.0% |
| Number.000016 | Number | 6 | 687 | 32 | 0 | False | True | False | False | False | False | False | False | 0.0% |
| Number.000075 | Number | 6 | 645 | 8 | 0 | False | True | False | False | False | False | False | False | 0.0% |
| ShippingCode.000008 | ShippingCode | 3 | 1184 | 1 | 0 | False | False | False | False | False | False | False | False | 0.0% |
| Number.000029 | Number | 3 | 617 | 6 | 0 | True | False | False | True | True | False | False | False | 0.0% |
| Number.000049 | Number | 4 | 624 | 32 | 0 | True | False | False | True | True | False | False | False | 0.0% |
| City.000010 | City | 3 | 574 | 1 | 0 | False | True | True | False | False | False | True | False | 0.0% |
| Column.000001 | Column | 6 | 491 | 1 | 0 | False | True | True | False | False | False | True | False | 0.0% |
| DateTime.000007 | DateTime | 6 | 974 | 1 | 0 | False | True | True | False | False | False | True | False | 0.0% |
| DateTime.000017 | DateTime | 6 | 1027 | 32 | 0 | False | True | True | False | False | False | True | False | 0.0% |
| DateTime.000025 | DateTime | 6 | 1027 | 8 | 0 | False | True | True | False | False | False | True | False | 0.0% |
| DateTime.000034 | DateTime | 6 | 484 | 1 | 0 | False | True | True | False | False | False | True | False | 0.0% |
| DateTime.000094 | DateTime | 4 | 948 | 1 | 0 | False | True | True | False | False | False | True | False | 0.0% |
| DateTime.000108 | DateTime | 6 | 862 | 1 | 0 | False | True | True | False | False | False | True | False | 0.0% |
| DateTime.000111 | DateTime | 6 | 862 | 2 | 0 | False | True | True | False | False | False | True | False | 0.0% |
| Number.000022 | Number | 6 | 701 | 24 | 0 | False | True | True | False | False | False | True | False | 0.0% |
| Number.000028 | Number | 3 | 768 | 1 | 0 | False | True | True | False | False | False | True | False | 0.0% |
| Number.000043 | Number | 6 | 736 | 1 | 0 | False | True | True | False | False | False | True | False | 0.0% |
| UserAgent.000003 | UserAgent | 6 | 805 | 1 | 0 | False | True | True | False | False | False | True | False | 0.0% |
| DateTime.000004 | DateTime | 6 | 1891 | 1 | 1 | True | True | True | True | True | True | True | False | 100.0% |
| DateTime.000104 | DateTime | 6 | 1199 | 1 | 1 | True | True | True | True | True | True | True | False | 100.0% |
| FilePath.000001 | FilePath | 6 | 582 | 1 | 1 | True | True | True | True | True | True | True | False | 100.0% |
| Language.000002 | Language | 6 | 1292 | 1 | 1 | True | True | True | True | True | True | True | False | 100.0% |
| Name.000028 | Name | 6 | 1054 | 1 | 1 | True | True | True | True | True | True | True | False | 100.0% |
| Phone.000008 | Phone | 6 | 1228 | 1 | 1 | True | True | True | True | True | True | True | False | 100.0% |
| Phone.000011 | Phone | 3 | 1093 | 1 | 1 | True | True | True | True | True | True | True | False | 100.0% |
Files
runs/main_final/row_candidates.csvruns/main_final/task_details.csvruns/main_final/method_details.csvruns/main_final/summary.csvanalysis/summary.csvanalysis/task_details.csvanalysis/method_details.csvanalysis/family_summary.csv
Experiment log 8
Show the running log (8 entries, 2026-06-27)
2026-06-27
- Created standalone experiment directory.
- Copied deterministic expression DSL into local src/dsl_core.py for standalone execution.
Run smoke_v1
- Tasks: 6
- Candidate rows: 210
- Candidate-support full-task exact: 16.7%
- Direct greedy full-task exact: 66.7%
- Program oracle full-task exact: 33.3%
Run main_v1
- Tasks: 40
- Candidate rows: 1428
- Candidate-support full-task exact: 22.5%
- Direct greedy full-task exact: 50.0%
- Program oracle full-task exact: 27.5%
Run smoke_v2
- Tasks: 6
- Candidate rows: 210
- Candidate-support full-task exact: 16.7%
- Direct greedy full-task exact: 66.7%
- Program oracle full-task exact: 33.3%
Iteration note
main_v2with 128 real pseudo tables and 128 shuffled pseudo tables was interrupted because the shuffled control dominated wall-clock before the 10-task progress marker.- Adjusted the implementation so the shuffled-pseudo control has its own smaller table/program budget while the real pseudo-label crystallizer remains bounded separately.
Run main_v2_bounded
- Tasks: 40
- Candidate rows: 1428
- Candidate-support full-task exact: 22.5%
- Direct greedy full-task exact: 50.0%
- Program oracle full-task exact: 27.5%
Run main_final
- Tasks: 40
- Candidate rows: 1428
- Candidate-support full-task exact: 22.5%
- Pseudo-program table full-task exact: 17.5%
- Pseudo-program with direct fallback full-task exact: 50.0%
- Direct greedy full-task exact: 50.0%
- Program oracle full-task exact: 27.5%
Run main_final
- Tasks: 40
- Candidate rows: 1428
- Candidate-support full-task exact: 22.5%
- Pseudo-program table full-task exact: 17.5%
- Pseudo-program with direct fallback full-task exact: 50.0%
- Direct greedy full-task exact: 50.0%
- Program oracle full-task exact: 27.5%
Figures 6
Data files 12
Result tables and metrics copied from the experiment folder — preview inline or open the raw file.
analysis/family_summary.csv6.2 kBanalysis/summary.csv498 Bruns/main_final/family_summary.csv6.2 kBruns/main_final/summary.csv498 Bruns/main_v1/family_summary.csv3.9 kBruns/main_v1/summary.csv322 Bruns/main_v2_bounded/family_summary.csv6.2 kBruns/main_v2_bounded/summary.csv498 Bruns/smoke_v1/family_summary.csv1.2 kBruns/smoke_v1/summary.csv437 Bruns/smoke_v2/family_summary.csv1.8 kBruns/smoke_v2/summary.csv637 B
Reproduce
This entry is source code or analysis only — there is no separate run to reproduce.