Skip to content

Rust library for program synthesis of string transformations from input-output examples 🔮

License

Notifications You must be signed in to change notification settings

anishathalye/synox

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Synox Build Status Crates.io Documentation

Synox implements program synthesis of string transformations from input-output examples. Perhaps the most well-known use of string program synthesis in end-user programs is the Flash Fill feature in Excel. These string transformations are learned from input-output examples.

Synox currently implements BlinkFill (Singh '16, in Proc. VLDB), an algorithm similar to Flash Fill.

Usage

Add this to your Cargo.toml:

[dependencies]
synox = "0.1"

Example

Consider the following table, with a missing entry in an output column.

Name Graduation Year Output
Alyssa P. Hacker 1985 A. Hacker '85
Ben Bitdiddle 2002 B. Bitdiddle '02
Cy D. Fect 2017 ?

Synox can infer a program that automatically fills in the missing entry with "C. Fect '17".

use synox::StringProgram;
use synox::blinkfill;

let unpaired: &[Vec<&str>] = &[];
let examples = &[(vec!["Alyssa P. Hacker", "1985"], "A. Hacker '85"   ),
                 (vec!["Ben Bitdiddle",    "2002"], "B. Bitdiddle '02")];

let prog = blinkfill::learn(unpaired, examples)?;

let result = prog.run(&["Cy D. Fect", "2017"])?;
assert_eq!(result, "C. Fect '17");

License

Copyright (c) Anish Athalye. Released under the MIT License. See LICENSE.md for details.

About

Rust library for program synthesis of string transformations from input-output examples 🔮

Resources

License

Stars

Watchers

Forks

Languages