├── PROPOSAL.md ├── README.md ├── REVIEW.md ├── TALK.md ├── homework ├── hw1 │ ├── demo_string_enumerator_problem1.py │ ├── demo_string_enumerator_problem2.py │ ├── hw1.md │ ├── simplestring1.tyrell │ └── simplestring2.tyrell ├── hw2 │ └── hw2.md └── hw3 │ ├── hw3.md │ └── res │ ├── example-question.png │ ├── morpheus-dsl-example.png │ └── morpheus-dsl.png ├── lectures ├── lecture1.pdf ├── lecture10.pdf ├── lecture11.pdf ├── lecture12.pdf ├── lecture13.pdf ├── lecture2.pdf ├── lecture3.pdf ├── lecture4.pdf ├── lecture5.pdf ├── lecture6.pdf ├── lecture7.pdf ├── lecture8.pdf └── lecture9.pdf ├── poster ├── .DS_Store ├── Makefile ├── baposter.cls ├── dd.smt2 ├── images │ ├── .DS_Store │ ├── bsi_res.pdf │ ├── chart.png │ ├── code-hunter.pdf │ ├── example.png │ ├── hunter.pdf │ ├── logo.png │ ├── logo1.jpeg │ ├── logo2.png │ ├── pintu.jpg │ ├── pliny.png │ ├── taiji.png │ ├── ut.png │ └── viz-overview.png ├── lijuan.aux ├── lijuan.log ├── lijuan.pdf ├── lijuan.tex └── muse.tex └── report ├── .DS_Store ├── Makefile ├── abstract.tex ├── algorithm.tex ├── concl.tex ├── eval.tex ├── impl.tex ├── intro.tex ├── macros.tex ├── main.bib ├── main.tex ├── overview.tex ├── problem.tex └── related.tex /PROPOSAL.md: -------------------------------------------------------------------------------- 1 | # Tips for writing a project proposal 2 | 3 | 1. Define the problem. What is it? Why is it important? 4 | 2. Give a motivating running example to illustrate the problem. 5 | 3. What are the challenges in your project? 6 | 4. What is the tentative solution for this problem? 7 | 5. How do you evaluate the successfulness of your approach? What are the data set or benchmarks? Are you comparing other tools? 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CS190I Program Synthesis for the Masses 2 | 3 | The goal of this course is to give an introduction to program synthesis, a new field at the intersection of programming languages, software engineering, and AI. The course will explore a number of fundamental questions around the problem of how to automatically discover programs that do what the user expects. In particular, we will explore program synthesis in the context of attack synthesis for smart contracts, as well as program-by-example for data visualization and data wrangling. 4 | 5 | The workloads include 3 programming assignments, 4 paper reviews, and a poster session for the final project. 6 | 7 | # Office hour 8 | Instructor : Yu Feng (yufeng@UCSBCS) 9 | 10 | TA : Yanju Chen (yanju@UCSBCS) 11 | 12 | Class: M,Wed, 9:15am, Zoom 13 | 14 | Instructor's office hour: Fri, 9am-10am 15 | 16 | TA's office hour: Mon, 4pm-5pm, Zoom, or by Appointment 17 | 18 | Slack: https://join.slack.com/t/cs190i-spring21/shared_invite/zt-nw9earis-ot5icSlSAUGOqUewDV8lzg 19 | 20 | 21 | | Date | Topic | Slides | Read | Out | Due | 22 | |-------|-----------------------------------------------|--------|------|-----|-----| 23 | | 3/29 | Welcome & Course Overview | [lec1](lectures/lecture1.pdf) | | | | 24 | | 3/31 | Solver-Aided Synthesis I (Rosette) | [lec2](lectures/lecture2.pdf) | | | | 25 | | 4/5 | Solver-Aided Synthesis I (Neo) | [lec3](lectures/lecture3.pdf) | R1 | | | 26 | | 4/7 | Introduction to SMT and CFG | [lec4](lectures/lecture4.pdf) | | [HW1](homework/hw1/hw1.md) | | 27 | | 4/12 | Introduction to Inductive Synthesis | [lec5](lectures/lecture5.pdf) | R2 | | R1 | 28 | | 4/14 | Enumerative Synthesis | [lec6](lectures/lecture6.pdf) | | | | 29 | | 4/19 | Component-based Synthesis | [lec7](lectures/lecture7.pdf) | | | HW1 | 30 | | 4/21 | Speed-up Synthesis with Abstract Semantics | [lec8](lectures/lecture8.pdf) | R3 | [HW2](homework/hw2/hw2.md) | R2 | 31 | | 4/26 | Synthesis with Deep Learning | [lec9](lectures/lecture9.pdf) | Proposal | | | 32 | | 4/28 | Multi-model Program Synthesis | [lec10](lectures/lecture10.pdf) | | | R3 | 33 | | 5/3 | Inductive Synthesis with Stochastic Search | [lec11](lectures/lecture11.pdf) | | | HW2 | 34 | | 5/5 | Case I: Visualization Synthesis | [lec12](lectures/lecture12.pdf) | | | Proposal (2 pages) | 35 | | 5/10 | Case II: Attack Synthesis for Smart Contracts | [lec13](lectures/lecture13.pdf) | R4 | | | 36 | | 5/12 | Counter-example Guided Synthesis | [lec14](#) | | [HW3](homework/hw3/hw3.md) | | 37 | | 5/17 | Combine ML with Deductive Reasoning | | | | | 38 | | 5/19 | Interactive Synthesis with Human in the Loop | | | | | 39 | | 5/24 | Deductive Synthesis | | | | R4, Poster (PDF) | 40 | | 5/26 | Virtual Poster Session | | | | HW3 | 41 | | 5/31 | Memorial Day | | | | | 42 | | 6/2 | Final week, no class | | | | Final Report (8 pages) | 43 | 44 | 45 | # Grading 46 | 47 | 1. Programming assignments: 30% 48 | 1. 3 programming assignments, 10% each 49 | 50 | 2. Paper reviews: 20% 51 | 1. 4 papers, 5% each 52 | 53 | 3. Final project: 50% 54 | 1. Team formed by deadline: 5% 55 | 2. 1-page project proposal: 15% 56 | 3. Project presentation: 15% 57 | 4. Final report: 15% 58 | 59 | 60 | Below is a grading system used by CS190I (No curving). 61 | 62 | | Letter | Percentage | 63 | |--------|------------| 64 | | A+ | 95–100% | 65 | | A | 90–94% | 66 | | A- | 85–89% | 67 | | B+ | 80–84% | 68 | | B | 75–79% | 69 | | B- | 70–74% | 70 | | C+ | 65–69% | 71 | | C | 60–64% | 72 | | F | <60% | 73 | 74 | Credit: https://en.wikipedia.org/wiki/Academic_grading_in_the_United_States 75 | 76 | 77 | ### Submission 78 | 1. Please submit your homework to gradescope: https://www.gradescope.com 79 | 2. All paper reviews should be in PDF. 80 | 81 | 82 | # Homework 83 | 84 | 1. [Homework1](homework/hw1/hw1.md) 85 | 2. [Homework2](homework/hw2/hw2.md) 86 | 3. [Homework3](homework/hw3/hw3.md) 87 | 88 | 89 | # Reading assignments 90 | 1. A Lightweight Symbolic Virtual Machine for Solver-Aided Host Languages. Emina Torlak and Rastislav Bodik. PLDI'14. 91 | 2. Program synthesis using conflict-driven learning. Yu Feng, Ruben Martins, Osbert Bastani, and Isil Dillig. PLDI'18. **Distinguished Paper Award** 92 | 3. Scaling symbolic evaluation for automated verification of systems code with Serval. Luke Nelson, James Bornholt, Ronghui Gu, Andrew Baumann, Emina Torlak, and Xi Wang. SOSP'2019. **Best Paper Award** 93 | 4. Schkufza et.al. Stochastic Superoptimization. ASPLOS'13 94 | 95 | 96 | Tips for writing paper [reviews](REVIEW.md). 97 | 98 | Tips for writing a project [proposal](PROPOSAL.md). 99 | 100 | # References 101 | 102 | - Rondon, Patrick M., Ming Kawaguci, and Ranjit Jhala. "Liquid types." PLDI'2008. 103 | 104 | - Ali Sinan Köksal, Yewen Pu, Saurabh Srivastava, Rastislav Bodík, Jasmin Fisher, Nir Piterman. Synthesis of biological models from mutation experiments. Principles of Programming Languages (POPL). 2013. ACM DL 105 | 106 | - Srivastava, Saurabh, Sumit Gulwani, and Jeffrey S. Foster. From program verification to program synthesis. POPL 2010. 107 | 108 | - Jha, Susmit, et al. Oracle-guided component-based program synthesis. ICSE 2010. 109 | 110 | - Gulwani, Sumit. Automating string processing in spreadsheets using input-output examples. POPL 2011. 111 | 112 | - Phothilimthana, Phitchaya Mangpo, et al. "Scaling up superoptimization." ASPLOS 2016. 113 | 114 | - Chandra, Kartik, and Rastislav Bodik. Bonsai: synthesis-based reasoning for type systems. POPL 2017. 115 | 116 | - Bornholt, James, et al. Optimizing synthesis with metasketches. POPL 2016. 117 | 118 | - Yaghmazadeh, Navid, et al. SQLizer: query synthesis from natural language. OOPSLA 2017. **Distinguished Paper Award** 119 | 120 | - Deepcoder: Learning to write programs. Matej, et al. ICLR'16. 121 | 122 | - Helgi Sigurbjarnarson, James Bornholt, Emina Torlak, and Xi Wang. Push-Button Verification of File Systems via Crash Refinement. OSDI 2016. **Best Paper Award** 123 | 124 | - Shaon Barman, Sarah E. Chasins, Rastislav Bodik, Sumit Gulwani. Ringer: web automation by demonstration. OOPSLA 2016. 125 | 126 | - Luke Nelson, Jacob Van Geffen, Emina Torlak, and Xi Wang. Specification and verification in the field: Applying formal methods to BPF just-in-time compilers in the Linux kernel. OSDI 2020. 127 | 128 | - Chenming Wu, Haisen Zhao, Chandrakana Nandi, Jeff Lipton, Zachary Tatlock, Adriana Schulz. Carpentry Compiler. SIGGRAPH ASIA 2019. 129 | 130 | - Permenev, Anton, et al. Verx: Safety verification of smart contracts. 2020 IEEE Symposium on Security and Privacy 2020. 131 | 132 | - Chenglong Wang, Yu Feng, Ras Bodik, Alvin Cheung, Isil Dillig. Visualization by Example. POPL'2020. 133 | 134 | - Beckett, Ryan, et al. Network configuration synthesis with abstract topologies. PLDI'2017. 135 | 136 | - Dai, Wang-Zhou, et al. Bridging machine learning and logical reasoning by abductive learning. NIPS'2019. 137 | 138 | 139 | 140 | -------------------------------------------------------------------------------- /REVIEW.md: -------------------------------------------------------------------------------- 1 | # Tips for writing paper reviews 2 | 3 | 1. First, provide a summary of the paper's content. 4 | 2. Second, provide list of major points for and against accepting the paper. 5 | 3. Third, write more detailed explanation of these points and justification to support your arguments. 6 | 5. Finally, some extra comments to other minor issues (typos, grammatically errors, etc) of the paper. 7 | 6. Be respectful to the authors: please write a comprehensive review that contains at least 700 words 8 | 9 | [Here is a sample review](https://tinyurl.com/y6j39lxb) 10 | -------------------------------------------------------------------------------- /TALK.md: -------------------------------------------------------------------------------- 1 | # Tips for attending/giving a presentation 2 | 3 | If you are the presenter: 4 | 5 | 1. Motivation of the paper? Why is it important? 6 | 2. Using one slide to introduce necessary background so that people can follow the rest of the materials. 7 | 3. What are the challenges? 8 | 4. What is the solution? Explain the solution in an idiot-proof way. 9 | 5. How well is the proposed approach? Highlight the results. 10 | 6. Fewer texts, more figures and animations. 11 | 7. Do NOT directly copy content from the paper, rephrase with your own words. 12 | 13 | If you are the audience: 14 | 15 | 1. Make sure you read the paper before the talk! 16 | 2. Listen the talk carefully and respect your classmates. 17 | 3. Come up with questions during the talk. 18 | -------------------------------------------------------------------------------- /homework/hw1/demo_string_enumerator_problem1.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | import tyrell.spec as S 4 | from tyrell.interpreter import PostOrderInterpreter 5 | from tyrell.enumerator import SmtEnumerator, RelaxedRandomEnumerator 6 | from tyrell.decider import Example, ExampleConstraintDecider, ExampleConstraintPruningDecider 7 | from tyrell.synthesizer import Synthesizer 8 | from tyrell.logger import get_logger 9 | 10 | logger = get_logger('tyrell') 11 | 12 | class ToyInterpreter(PostOrderInterpreter): 13 | 14 | def eval_get_delimiter(self, node, args): 15 | return args[0] 16 | 17 | def eval_get_token(self, node, args): 18 | return args[0] 19 | 20 | def eval_get_int(self, node, args): 21 | return int(args[0]) 22 | 23 | def eval_concat(self, node, args): 24 | return args[0] + args[1] 25 | 26 | def eval_substr(self, node, args): 27 | arg_str = args[0] 28 | arg_pos0 = args[1] 29 | arg_pos1 = args[2] 30 | return arg_str[arg_pos0:arg_pos1] 31 | 32 | def eval_reverse(self, node, args): 33 | arg_str = args[0] 34 | return arg_str[::-1] 35 | 36 | def eval_sort(self, node, args): 37 | arg_str = args[0] 38 | return "".join(sorted(list(arg_str))) 39 | 40 | def eval_tolower(self, node, args): 41 | arg_str = args[0] 42 | return arg_str.lower() 43 | 44 | def eval_toupper(self, node, args): 45 | arg_str = args[0] 46 | return arg_str.upper() 47 | 48 | 49 | def main(): 50 | logger.info('Parsing Spec...') 51 | # TBD: parse the DSL definition file and store it to `spec` 52 | spec = ?? 53 | logger.info('Parsing succeeded') 54 | 55 | logger.info('Building synthesizer...') 56 | synthesizer = Synthesizer( 57 | enumerator=RelaxedRandomEnumerator(spec, max_depth=3, min_depth=0, seed=None), 58 | decider=ExampleConstraintDecider( 59 | spec=??, # TBD: provide the spec here 60 | interpreter=ToyInterpreter(), 61 | examples=??, # TBD: provide the example here 62 | ) 63 | ) 64 | logger.info('Synthesizing programs...') 65 | 66 | prog = synthesizer.synthesize() 67 | if prog is not None: 68 | logger.info('Solution found: {}'.format(prog)) 69 | else: 70 | logger.info('Solution not found!') 71 | 72 | 73 | if __name__ == '__main__': 74 | logger.setLevel('DEBUG') 75 | main() 76 | -------------------------------------------------------------------------------- /homework/hw1/demo_string_enumerator_problem2.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | import tyrell.spec as S 4 | from tyrell.interpreter import PostOrderInterpreter 5 | from tyrell.enumerator import SmtEnumerator, RelaxedRandomEnumerator 6 | from tyrell.decider import Example, ExampleConstraintDecider, ExampleConstraintPruningDecider 7 | from tyrell.synthesizer import Synthesizer 8 | from tyrell.logger import get_logger 9 | 10 | logger = get_logger('tyrell') 11 | 12 | class ToyInterpreter(PostOrderInterpreter): 13 | 14 | def eval_get_delimiter(self, node, args): 15 | return args[0] 16 | 17 | def eval_get_token(self, node, args): 18 | return args[0] 19 | 20 | def eval_get_int(self, node, args): 21 | return int(args[0]) 22 | 23 | def eval_concat(self, node, args): 24 | return args[0] + args[1] 25 | 26 | def eval_substr(self, node, args): 27 | arg_str = args[0] 28 | arg_pos0 = args[1] 29 | arg_pos1 = args[2] 30 | return arg_str[arg_pos0:arg_pos1] 31 | 32 | def eval_reverse(self, node, args): 33 | arg_str = args[0] 34 | return arg_str[::-1] 35 | 36 | def eval_sort(self, node, args): 37 | arg_str = args[0] 38 | return "".join(sorted(list(arg_str))) 39 | 40 | def eval_tolower(self, node, args): 41 | arg_str = args[0] 42 | return arg_str.lower() 43 | 44 | def eval_toupper(self, node, args): 45 | arg_str = args[0] 46 | return arg_str.upper() 47 | 48 | def eval_split(self, node, args): 49 | # TBD: implement the split function 50 | ?? 51 | 52 | def eval_join(self, node, args): 53 | # TBD: implement the join function 54 | ?? 55 | 56 | 57 | def main(): 58 | logger.info('Parsing Spec...') 59 | # TBD: parse the DSL definition file and store it to `spec` 60 | spec = ?? 61 | logger.info('Parsing succeeded') 62 | 63 | logger.info('Building synthesizer...') 64 | synthesizer = Synthesizer( 65 | enumerator=RelaxedRandomEnumerator(spec, max_depth=3, min_depth=0, seed=None), 66 | decider=ExampleConstraintDecider( 67 | spec=??, # TBD: provide the spec here 68 | interpreter=ToyInterpreter(), # Question Hole 69 | examples=??, # TBD: provide the example here 70 | ) 71 | ) 72 | logger.info('Synthesizing programs...') 73 | 74 | prog = synthesizer.synthesize() 75 | if prog is not None: 76 | logger.info('Solution found: {}'.format(prog)) 77 | else: 78 | logger.info('Solution not found!') 79 | 80 | 81 | if __name__ == '__main__': 82 | logger.setLevel('DEBUG') 83 | main() 84 | -------------------------------------------------------------------------------- /homework/hw1/hw1.md: -------------------------------------------------------------------------------- 1 | # Homework Assignment 1 2 | 3 | **Due Monday, April 19, 2021 at 11:59pm (Pacific Time)** 4 | 5 | In this homework assignment, you will use Trinity to build a toy program synthesizer for string manipulations. You will be learning the basic usage of Trinity as well as its design philosophy. Using Trinity, you will be able to create your own customized program synthesizer for various domains in a much concise and easier way. 6 | 7 | Note: If you are passionate in programming languages techniques and are open to challenges, I have inserted some slightly more challenging problems and tips (which are marked with the cowboy face 🤠). These problems will ***NOT*** count into any of your final scores, but just for those who want to explore more of this domain. Enjoy! 8 | 9 | ## Submission 10 | 11 | Please submit the solution files via gradescope. 12 | 13 | In this homework, you only need to submit the following files: 14 | 15 | - `demo_string_enumerator_problem1.py` 16 | - `demo_string_enumerator_problem2.py` 17 | 18 | Note: This homework should not take too long to finish. If you happened to struggle a lot, it could be my problem on stating the questions, and please don't hesitate to reach out to us about your confusions, via Slack, office hours or emails. 19 | 20 | ## Getting Started 21 | 22 | First, get the Trinity library to your machine and switch to the `random-fix` branch (which includes functionalities that you need for this homework assignment): 23 | 24 | ```bash 25 | git clone https://github.com/fredfeng/Trinity.git 26 | cd Trinity/ 27 | git checkout random-fix 28 | ``` 29 | 30 | You can use Trinity from within its root folder without actually installing it. To verify the installation of Trinity, try to run the string transformation demo from the repo root: 31 | 32 | ```bash 33 | cd Trinity/ 34 | python demo_string_enumerator.py 35 | ``` 36 | 37 | If it prints out some debugging messages followed by an info message, which says: 38 | 39 | ``` 40 | [info] Solution found: plus(plus(@param0, const(_apple_)), @param1) 41 | ``` 42 | 43 | then your environment is configured successfully. 44 | 45 | ## Problem Overview 46 | 47 | #### The Simple String Programming Language 48 | 49 | We now use Trinity to quickly build a synthesizer for a subset of string manipulation functions in Python, and use it to actually solve some problems. Specifically, we extract a subset of several string related methods from Python (a full documentation is available [here](https://docs.python.org/3/library/stdtypes.html#string-methods) if you are interested in their semantics) and re-pack them into our simple string domain-specific language (DSL): 50 | 51 | ``` 52 | Str ::= concat(Str, Str) | substr(Str, Int, Int) | reverse(Str) 53 | | sort(Str) | tolower(Str) | toupper(Str) | join(List, Str) 54 | List ::= split(Str, Str) 55 | ``` 56 | 57 | where `Str`, `List`, and `Int` correspond to the string, list and integer types in Python. Every function has different semantic meanings: 58 | 59 | - `concat(Str a, Str b)`: similar to string concatenation `a+b` in Python, where in here this function simply accepts two strings and concatenate them. 60 | - `substr(Str a, Int b, Int c)`: similar to string slicing in Python, where in here this function extracts the chars from a string from index `b` (inclusive) to `c` (exclusive). 61 | - `reverse(Str a)`: similar to the reverse function in Python, where in here the string gets reversed. 62 | - `sort(Str a)`: similar to the sorting function in Python, where in here this function sorts every char in string `a` in alphabetical (ASCII ascending) order. 63 | - `tolower(Str a)`: similar to `a.lower()` in Python, which sets all letter cases to lower. 64 | - `toupper(Str a)`: similar to `a.upper()` in Pyhton, which sets all letter cases to upper. 65 | - `split(Str a, Str b)`: similar to `a.split(b)` in Python, which splits the string `a` by delimiter `b`. 66 | - `join(List a, Str b)`: similar to `b.join(a)` in Python, which concatenates a list `a` by delimiter `b`. 67 | 68 | #### Setting up Simple String Language in Trinity 69 | 70 | To set up your own synthesizer, you will need 3 basic components: DSL definition (spec), language interpreter and the main synthesis loop. 71 | 72 | It's super easy to write the DSL definition, because I've done that for you already 🙂! Simply download the DSL definition files `simplestring1.tyrell` (for Problem1) and `simplestring2.tyrell` (for Problem2) from [here](https://github.com/fredfeng/CS190I/blob/main/homework/hw1/) and place them to the `example/` folder. 73 | 74 | > 🤠: Instead of downloading the provided file, could you come up with your own one (by observing the existing example DSLs from the `example/` folder)? 75 | 76 | Also, you need the interpreters and main synthesis loops, which can be downloaded [here](https://github.com/fredfeng/CS190I/blob/main/homework/hw1/). To start the homework, you need to place it to the repo root folder. Note that currently both the interpreter and synthesis loop are missing some critical parts (marked with holes `??` and commented with "TBD"), and your job is to finish those missing parts. 77 | 78 | ## Problem 1 (60%) 79 | 80 | Fill in the missing parts (**3 holes, 20% each hole**) in `demo_string_enumerator_problem1.py` so that it runs and finds the correct solution. 81 | 82 | Note that in this problem, you need to load `simplestring1.tyrell`. An example is given to specify the correct solution. Here you need to encode the following example into the synthesizer: 83 | 84 | ``` 85 | "ABCDE" -> "abcde" 86 | ``` 87 | 88 | which is, given the input string "ABCDE", the synthesizer is asked to produce a program written in our DSL that can produce the output "abcde" given this input. Presumably, the solution involves the `tolower` function. 89 | 90 | Note that the Trinity repo provides you with several demos of different synthesizers, if you are running out of clues about what to fill in, read those demos (or tutorial) to learn the basic usage. 91 | 92 | ## Problem 2 (40%) 93 | 94 | Now that you are familiar with the basic usage of Trinity, let's switch to a slightly complex example: 95 | 96 | ``` 97 | ["Final", "Fantasy", "VII"] -> "Final*Fantasy*VII" 98 | ``` 99 | 100 | Note that in this problem, you need to load `simplestring2.tyrell`. This example concatenates the three strings from a list into one using delimiter "*". You are going to fill in the missing parts (**5 holes, 8% each hole**) in `demo_string_enumerator_problem2.py` so that the synthesizer runs and finds the correct solution. 101 | 102 | > 🤠: What if you want to specify multiple examples? Try to modify the `examples` arguments and provide an extra example that says: 103 | > 104 | > ```["Resident", "Evil", "Village"] -> "Resident*Evil*Village"``` 105 | > 106 | > Will the synthesizer give the same solution? 107 | > 108 | > 🤠: How about adding the following example? 109 | > 110 | > ```["Resident", "Evil", "Village"] -> "resident*evil*village"``` 111 | 112 | ## 🤠: Problem 3 (0%) 113 | 114 | As you can see the time spent for finding a correct solution can be quite long, especially when you have complicated examples, large DSLs or trivial random searching strategy. In fact, Trinity is equipped with a powerful deduction engine that helps prune the search space and find the solution even faster. However, the current setting of this homework does not enable deduction / does not benefit from deduction. Could you modify the synthesizer in Problem 2 so that it can benefit from the deduction engine? 115 | 116 | Hint: You'll need to modify both the `simplestring2.tyrell` file and one of the demo synthesizer file. 117 | 118 | -------------------------------------------------------------------------------- /homework/hw1/simplestring1.tyrell: -------------------------------------------------------------------------------- 1 | enum RawDelimiter { 2 | "_", "-", "*", ".", " ", "" 3 | } 4 | enum RawToken { 5 | "a", "b", "c", "A", "B", "C" 6 | } 7 | enum RawInt { 8 | "0", "1", "2", "3", "-1", "-2", "-3" 9 | } 10 | 11 | value Empty; 12 | value Str; 13 | value Int; 14 | value List; 15 | 16 | program Toy(Str) -> Str; 17 | func empty: Empty -> Empty; 18 | 19 | func get_delimiter: Str -> RawDelimiter; 20 | func get_token: Str -> RawToken; 21 | func get_int: Int -> RawInt; 22 | 23 | func concat: Str -> Str, Str; 24 | func substr: Str -> Str, Int, Int; 25 | func reverse: Str -> Str; 26 | func sort: Str -> Str; 27 | func tolower: Str -> Str; 28 | func toupper: Str -> Str; -------------------------------------------------------------------------------- /homework/hw1/simplestring2.tyrell: -------------------------------------------------------------------------------- 1 | enum RawDelimiter { 2 | "_", "-", "*", ".", " ", "" 3 | } 4 | enum RawToken { 5 | "a", "b", "c", "A", "B", "C" 6 | } 7 | enum RawInt { 8 | "0", "1", "2", "3", "-1", "-2", "-3" 9 | } 10 | 11 | value Empty; 12 | value Str; 13 | value Int; 14 | value List; 15 | 16 | program Toy(List) -> Str; 17 | func empty: Empty -> Empty; 18 | 19 | func get_delimiter: Str -> RawDelimiter; 20 | func get_token: Str -> RawToken; 21 | func get_int: Int -> RawInt; 22 | 23 | func concat: Str -> Str, Str; 24 | func substr: Str -> Str, Int, Int; 25 | func reverse: Str -> Str; 26 | func sort: Str -> Str; 27 | func tolower: Str -> Str; 28 | func toupper: Str -> Str; 29 | 30 | func split: List -> Str, Str; 31 | func join: Str -> List, Str; -------------------------------------------------------------------------------- /homework/hw2/hw2.md: -------------------------------------------------------------------------------- 1 | # Homework Assignment 2 2 | 3 | **Due Monday, May 3, 2021 at 11:59pm (Pacific Time)** 4 | 5 | In this homework, you will be using Venti ([https://github.com/chyanju/Venti.git](https://github.com/chyanju/Venti.git)) to build clients to verify smart contracts. 6 | 7 | Note: If you are passionate in programming languages techniques and are open to challenges, I have inserted some slightly more challenging problems and tips (which are marked with the cowboy face 🤠). These problems will ***NOT*** count into any of your final scores, but just for those who want to explore more of this domain. Enjoy! 8 | 9 | ## Submission 10 | 11 | Please submit the solution files via gradescope. 12 | 13 | In this homework, you only need to submit the following files: 14 | 15 | - `task1-1.txt` required by Problem 1, Task 1-1 16 | - `task1-2.txt` required by Problem 1, Task 1-2 17 | - `task2-1.txt` required by Problem 2, Task 2-1 18 | - `P2A.sol` and `P2B.sol` required by Problem 2, Task 2-2 19 | - `task2-3.json` or `task2-3.txt` required by Problem 2, Task 2-3 20 | 21 | Note: This homework does require sometime to understand the background knowledge, but should be relatively straightforward to finish the tasks if you are clear about the mechanism of the environment and the tasks. If you happened to struggle a lot more than expected, it could be my problem on stating the questions, and please don't hesitate to reach out to us about your confusions, via Slack, office hours or emails. 22 | 23 | ## Getting Started 24 | 25 | First set up the Venti and Solidity environment by the following steps. 26 | 27 | #### Setting up Solidity Environment 28 | 29 | Follow the setup instructions of `solc-select` to install the Solidity environment here: [https://github.com/crytic/solc-select](https://github.com/crytic/solc-select). After the configuration is done, switch to solc version `0.7.3` by: 30 | 31 | ```bash 32 | solc-select use 0.7.3 33 | ``` 34 | 35 | Note that before you switch your `solc` version, you'll need to install Solidity version `0.7.3` if you haven't done so after the configuration. After than, issue: 36 | 37 | ```bash 38 | solc --version 39 | ``` 40 | 41 | and if you see the following information (or something similar), then you are good to go: 42 | 43 | ``` 44 | solc, the solidity compiler commandline interface 45 | Version: 0.7.3+commit.9bfce1f6.Darwin.appleclang 46 | ``` 47 | 48 | #### Setting up Venti Environment 49 | 50 | ***(Please follow the instructions below instead of the guide from the Venti repo; that guide is meant for development)*** 51 | 52 | Venti requires Racket 7.x, Rosette 3.x, Python 3.x and Antlr Python Target 4.8. 53 | 54 | It should be relatively easy for you to get a Python 3.x. If you still feel confused, consider setting up an Anaconda environment. See: [https://www.anaconda.com/products/individual](https://www.anaconda.com/products/individual). 55 | 56 | In this homework, Racket 7.7 is recommended. Go to [https://download.racket-lang.org/racket-v7.7.html](https://download.racket-lang.org/racket-v7.7.html) and follow the official guide to get and setup Racket 7.7 on your machine. 57 | 58 | After you have successfully configured Racket, you'll to add Rosette (a solver-aided language) to the current Racket installation. In this homework, Rosette 3.2 is recommended. To install Rosette, first clone the Rosette repository: 59 | 60 | ```bash 61 | git clone https://github.com/emina/rosette.git 62 | ``` 63 | 64 | Then checkout version 3.2: 65 | 66 | ```bash 67 | cd rosette/ 68 | git checkout c092b65 69 | ``` 70 | 71 | And then install it from the source directly: 72 | 73 | ```bash 74 | raco pkg remove rosette 75 | raco pkg install 76 | ``` 77 | 78 | For Antlr Python Target 4.8, follow the instructions [here](https://github.com/antlr/antlr4/blob/master/doc/python-target.md), or if you have `pip` set up, issue: 79 | 80 | ```bash 81 | pip install antlr4-python3-runtime==4.8 82 | ``` 83 | 84 | ***Note that you need to install version 4.8; other Antlr versions may cause unexpected exceptions for the tool's parser.*** 85 | 86 | Then the environment for Venti should be ready. 87 | 88 | ## Problem Overview 89 | 90 | You will be verifying smart contracts written by Solidity. A smart contract is a self-executing contract with the terms of the agreement between buyer and seller being directly written into lines of code. You can think of a smart contract as a special kind of source code that runs on a distributed and decentralized blockchain network, while the grammar of Solidity should look familiar if you used to write codes in C/C++/Java. 91 | 92 | Even if you are not familiar with Solidity, we are not using/verifying any fancy features of Solidity itself; instead, the verification tasks here are relatively general. 93 | 94 | ## Problem 1 (40%): Test the Environment 95 | 96 | First get Venti from github and check out the branch for homework `CS190I`: 97 | 98 | ```bash 99 | git clone https://github.com/chyanju/Venti.git 100 | cd Venti/ 101 | git checkout CS190I 102 | ``` 103 | 104 | And change directory to `targets/yul-ast-0.7.3` (without further notifications, we'll be using this client in this homework, and "working directory" refers to `targets/yul-ast-0.7.3` if not otherwise specified): 105 | 106 | ```bash 107 | cd targets/yul-ast-0.7.3 108 | ``` 109 | 110 | So we'll be verifying the equivalence between two contracts: `P1A.sol` and `P1B.sol` in the `tests` folder under the working directory. Then, compile two smart contracts into YUL representations (for details of YUL language, see [here](https://docs.soliditylang.org/en/v0.7.3/yul.html) if you are interested): 111 | 112 | ```bash 113 | solc ./tests/P1A.sol --ir --overwrite -o ./tests/ 114 | solc ./tests/P1B.sol --ir --overwrite -o ./tests/ 115 | ``` 116 | 117 | Here ideally you should only see something like: 118 | 119 | ``` 120 | Compiler run successful. Artifact(s) can be found in directory ./tests/. 121 | ``` 122 | 123 | And this will give you `P1A.yul` and `P1B.yul` respectively in `tests` folder under the working directory. If you see something else rather than a successful message, one of your previous steps could have failed. Please revisit to correct it. 124 | 125 | Next we pare the YUL files into json representations that are readable by the verifier: 126 | 127 | ```bash 128 | python ./yul_parser.py --yul ./tests/P1A.yul 129 | python ./yul_parser.py --yul ./tests/P1B.yul 130 | ``` 131 | 132 | You'll then see `P1A.json` and `P1B.json` from the `tests` folder under the workin directory, if everything works as expected. 133 | 134 | Then we can lanunch Venti to verify the equivalence between these two contracts using an existing configuration file `P1-config.json` in `configs` folder: 135 | 136 | ```bash 137 | racket ./yul-bmc.rkt --config ./configs/P1-config.json --verbose 138 | ``` 139 | 140 | If it runs successfully, you will see the following output: 141 | 142 | ``` 143 | task 0: #f 144 | task 1: #t 145 | ``` 146 | 147 | #### Task 1-1 (20%) 148 | 149 | Save your commands and their corresponding outputs into a file called `task1-1.txt`. 150 | 151 | #### Task 1-2 (20%) 152 | 153 | By observing the two contracts `P1A.sol` and `P1B.sol`, ***briefly*** explain whether the functions `modifyX` have the same semantics or not. If not, provide a counterexample input to these two functions where one returns a different output compared with the other. Write down your answer to a file called `task1-2.txt`. 154 | 155 | ## Problem 2 (60%): Customize the Verification Tasks 156 | 157 | #### Venti Verification Design 158 | 159 | In this homework, we define the notion of equivalence based on a special kind of functions, which we call `observe` functions. For example, in `P1A.sol` and `P1B.sol` there are identical `observe` functions that returns the same variable from the contract that we are trying to check equivalence of: 160 | 161 | ```java 162 | function observe() public view returns (uint obsX) { 163 | obsX = xValue; 164 | } 165 | ``` 166 | 167 | The `observe` functions are usually attached to a sequence of operations (i.e. function calls, as you can see in `Tasks` field of `P1-config.json`) to get the final value of the variables of interest. Then our client checks the equivalence of the two returned values (could be concrete or symbolic). You can think of this is a special kind of equivalence called "equivalence modulo observation". 168 | 169 | For example, there are two tasks (or transactions) defined in `P1-config.json`, where each task is represented by a list of function calls. The first task: 170 | 171 | ```json 172 | [ 173 | [ 174 | "txn_function_call", 175 | "constructor" 176 | ], 177 | [ 178 | "txn_function_call", 179 | "observe" 180 | ] 181 | ] 182 | ``` 183 | 184 | calls the `constructor` first and then directly the `observe` function. The second task: 185 | 186 | ```json 187 | [ 188 | [ 189 | "txn_function_call", 190 | "constructor" 191 | ], 192 | [ 193 | "txn_function_call", 194 | "modifyX", 195 | "uint" 196 | ], 197 | [ 198 | "txn_function_call", 199 | "observe" 200 | ] 201 | ] 202 | ``` 203 | 204 | calls an additional method `modifyX` with corresponding argument of type `uint` (which will be initialized as a symbolic integer in Rosette) before calling the `observe` function. 205 | 206 | #### Add a New Verification Task 207 | 208 | In this problem, you are given two new smart contracts: `P2A.sol` and `P2B.sol`, which are slightly different from the ones provided in Problem 1, with additional class members and functions that deal with variable `yValue`. There's also a `P2-config.json` provided. 209 | 210 | However, when you try to verify the equivalence of two smart contracts by following the aforementioned steps, you get the results saying the two contracts are equivalent, beause the returned results of every task from the two smart contracts are equal, which is ***problematic*** because the two smart contracts are not equal. 211 | 212 | #### Task 2-1 (20%) 213 | 214 | Read the smart contracts `P2A.sol` and `P2B.sol`, and ***briefly*** explain why they are not equivalent. Write down your answer to a file called `task2-1.txt`. 215 | 216 | #### Task 2-2 (20%) 217 | 218 | According to your manual analysis of the smart contracts from task 2-1 and understanding of the usage of `P1-config.json`, modify the `observe` functions of `P2A.sol` and `P2B.sol` so that verification using `P2-config.json` returns `#f`. Note that the `observe` function should satisfy the following: 219 | 220 | - `observe` functions of the new `P2A.sol` and `P2B.sol` should be the same; 221 | - `observe` function should not modify any variables of the contract; 222 | - `observe` function takes no argument. 223 | 224 | Submit the upated version of `P2A.sol` and `P2B.sol`. 225 | 226 | #### Task 2-3 (20%) 227 | 228 | By default, Solidity initializes an integer to `0` if no initial value is given. If you are required to include `constructor` function in all of your task definitions, can you still design `P2-config.json` to derive a `#f` result for some task to reveal the inequivalence of the two smart contracts? If yes, provide that new configuration file (and name it as `task2-3.json`); if no, ***briefly*** write down the reason in a file called `task2-3.txt`. Note that this task still uses the ***original*** version of `P2A.sol` and `P2B.sol`. 229 | 230 | ## 🤠 Problem 3 (0%): Write Your Own Client 231 | 232 | Even though we here use the notion of "equivalence module observation", what Venti actually provides is a symbolic virtual machine for running YUL source code. Read the main entrance of this homework `yul-bmc.rkt` about how to create and manipulate symbolic virtual machines, and come up with your own client that defines and checks the equivalence in different ways other than using `observe` functions, e.g., checking all resulting memory locations of the two smart contracts. -------------------------------------------------------------------------------- /homework/hw3/hw3.md: -------------------------------------------------------------------------------- 1 | # Homework Assignment 3 2 | 3 | **Due Monday, May 26, 2021 at 11:59pm (Pacific Time)** 4 | 5 | In this homework, you will be using Trinity ([https://github.com/fredfeng/Trinity](https://github.com/fredfeng/Trinity)) to build a multi-modal synthesizer for data science. 6 | 7 | Note: If you are passionate in programming languages techniques and are open to challenges, I have inserted some slightly more challenging problems and tips (which are marked with the cowboy face 🤠). These problems will ***NOT*** count into any of your final scores, but just for those who want to explore more of this domain. Enjoy! 8 | 9 | ## Submission 10 | 11 | Please submit the solution files via gradescope. 12 | 13 | In this homework, you only need to submit the following files: 14 | 15 | - `task1-1.log` required by Problem 1, Task 1-1 16 | - `task1-2.txt` required by Problem 1, Task 1-2 17 | - `task2-1.log` required by Problem 2, Task 2-1 18 | - `task2-2.log` required by Problem 2, Task 2-2 19 | - `task3.txt` required by Problem 3 20 | 21 | Note: You should be fairly familiar with the basic usage of the Trinity framework. If not, you can revisit HW1 of this course. For this homework, we will add a customized extension, a neural network, to the synthesizer built using Trinity, and use the network to account for user specification written in natural language, besides input-output examples. This process does require you to spend some time to read and understand the code and overall approach a bit in order to answer the homework questions and fill in the holes. If you happened to struggle a lot more than expected, it could be my problem on stating the questions, and please don't hesitate to reach out to us about your confusions, via Slack, office hours or emails. 22 | 23 | ## Problem Overview: Multi-Modal Synthesis Using Trinity 24 | 25 | In this homework, we will explore program synthesis on data science domain, using a pre-defined Trinity client for synthesizing programs written in Morpheus DSL. Morpheus is a DSL that performs various core data wrangling operations, whose syntax and semantics are originally adapted from the core of `tidyr` and `dplyr` packages of the R language. 26 | 27 | 🤠: See [here](https://fredfeng.github.io/papers/pldi17-extend.pdf) if you are interested in details of Morpheus. 28 | 29 | The following shows part of the Morpheus grammar that this homework is going to use (**hereinafter referred to as "Morpheus"**): 30 | 31 |

32 | morpheus-dsl 33 |
34 | Grammar of a subset of the Morpheus DSL. Adapted from here. 35 |

36 | 37 | As we can see, the Morpheus DSL includes different kinds of operations for data science, such as projections, mutations and aggragations. You can find some more illustrative examples showing the semantics of every component by the following: 38 | 39 |

40 | morpheus-dsl-example 41 |
42 | Examples showing concrete semantics of Morpheus DSL. Adapted from here. 43 |

44 | 45 | For a typical program synthesis question in data science, a user can usually provide an input-output example that describes her intentions, as well as some alternate helping texts (in natural language) that further strengthen the specifications. 46 | 47 | Let's take a look at a real question from StackOverflow: [Question#29775461](https://stackoverflow.com/questions/29775461/how-can-i-spread-repeated-measures-of-multiple-variables-into-wide-format). In the following snapshot of this question, the user not only provides a concrete input-output example, but also writes some useful descriptions in natural language that provide quite strong hints about what the desired solution should approximately look like. 48 | 49 |

50 | example-question 51 |
52 | A snapshot of StackOverflow question 29775461. 53 |

54 | 55 | Usually a synthesizer only takes into account of one form of specification. For example, in HW1 we implemented a synthesizer that only takes into string manipulation input-output examples. But in many real-world cases, specifications come with multiple modalities, which requires multi-modal synthesis. 56 | 57 | So we will extend the current Morpheus client in Trinity to also take natural language descriptions as part of the inputs, and use that to bias the search process during synthesis, so that the synthesizer can find the desired solution more quickly. 58 | 59 | ## Problem 1 (30%): Setting up R Environment and Client 60 | 61 | Note: This homework requires a Python version of 3.x, preferrably 3.6+. The following instructions assume you are using Python 3.6+. 62 | 63 | #### Configuring R Environment 64 | 65 | Before running the Morpheus client, we have to make sure we have the R environment and its Python wrapper `rpy2` are correctly configured. 66 | 67 | For setting up the R environment, you can follow [this guide](https://www.datacamp.com/community/tutorials/installing-R-windows-mac-ubuntu). Note that we only need the R runtime, while the RStudio mentioned in the guide is optional for this homework (but it gives you a better interactive shell for writing/debugging in R and data visualization). After you verify you have successfully configured the R environment, install the `tidyr` and `dplyr` packages via the following commands in R environment: 68 | 69 | ```R 70 | install.packages(c("dplyr","tidyr","compare")) 71 | ``` 72 | 73 | You will probably see some error/warning messages popped up, which are usually benign. After the installation is done, try to verify it by importing those packages: 74 | 75 | ```R 76 | library(dplyr) 77 | library(tidyr) 78 | ``` 79 | 80 | You will probably see the following output message: 81 | 82 | ``` 83 | Attaching package: ‘dplyr’ 84 | 85 | The following objects are masked from ‘package:stats’: 86 | 87 | filter, lag 88 | 89 | The following objects are masked from ‘package:base’: 90 | 91 | intersect, setdiff, setequal, union 92 | ``` 93 | 94 | which usually means your configuration is good. But if you see messages other than this, then probably something is wrong with your configuration. 95 | 96 | #### Installing Python R Wrapper 97 | 98 | The current Morpheus client in Trinity is written in Python. In order for Python to call and use R functionalities, a wrapper is needed. In particular, the `rpy2` package of version `3.0.5` is required. You can get it using `pip`: 99 | 100 | ```bash 101 | pip install rpy2==3.0.5 102 | ``` 103 | 104 | #### Task 1-1 (20%): Testing Basic Morpheus Client 105 | 106 | Clone the Trinity repo and switch to the `CS190I-HW3` branch: 107 | 108 | ```bash 109 | git clone https://github.com/fredfeng/Trinity.git 110 | cd Trinity/ 111 | git checkout CS190I-HW3 112 | ``` 113 | 114 | Then directly execute the Morpheus client `morpheus_enumerator.py` from the repo's root: 115 | 116 | ```bash 117 | python ./morpheus_enumerator.py --input0 ./benchmarks/morpheus/3/r3_input1.csv --output ./benchmarks/morpheus/3/r3_output1.csv --length 3 118 | ``` 119 | 120 | This will try to synthesize a solution for the aforementioned StackOverflow question, using Morpheus DSL, with additional deductions (e.g., conflict-driven learning from [Neo](https://fredfeng.github.io/papers/pldi18-neo.pdf)). The provided arguments specify the input dataframe, output dataframe, as well as the desired size of the program. 121 | 122 | Redirect all the output of running the previous command to a log file called `task1-1.log` and submit it. You should log all the standard, debugging and error outputs. 123 | 124 | > Hint: You can make use of the `>` operator in your terminal. 125 | > 126 | > Hint: Trinity outputs to different streams. You can do `2>&1` to captures all the output channels. 127 | 128 | #### Task 1-2 (10%): Code Understanding and Analysis 129 | 130 | Analyze the code and outputs in this problem, ***briefly*** provide your answers/thoughts to the following questions: 131 | 132 | 1. Does the client always follow the same order of enumeration? I.e., are the outputs of the log files always the same across multiple runs? 133 | 2. According to your understanding of the code, what decides the enumeration order? 134 | 135 | Submit your answers/thoughts via a file called `task1-2.txt`. 136 | 137 | ## Problem 2 (40%): Adding Neural Network Extension 138 | 139 | As you may have already seen that the Morpheus client from problem 1 is still runnning a bit slow, now in this problem we will try to introduce a neural network extension so that the synthesizer can take into account of the natural language hints provided by the user to further speed up the synthesis process. 140 | 141 | 🤠: The add-on neural network is part of the Mars framework. See [here](https://fredfeng.github.io/papers/fse19-mars.pdf) for more details. 142 | 143 | #### Configuring Neural Network Environment 144 | 145 | We use PyTorch to build and evaluate our neural model. So if you haven't got one, you can follow the [official PyTorch tutorial](https://pytorch.org/get-started/locally/) to get one. Note that problem 2 requires a PyTorch of version 1.4+ (preferrably). 146 | 147 | Additionally, since we are dealing with natural language, the extension utilizes the spaCy module for natural language normalization. You can configure spaCy by following its [official documentation](https://spacy.io/usage). 148 | 149 | To test whether the environment works, redirect to the repo root directory, start a Python REPL, and simply type: 150 | 151 | ```python 152 | import mars 153 | ``` 154 | 155 | If you see the following output: 156 | 157 | ``` 158 | use_cuda: False 159 | ``` 160 | 161 | then your environment is good to go. Note that you may also see `use_cuda: True` if you've got a GPU and have configured CUDA. But for this problem, having GPU and CUDA configured is optional and won't affect the major tasks. 162 | 163 | #### Task 2-1 (20%): Testing Extended Morpheus Client 164 | 165 | The main entrance to the extended Morpheus client is `app_main.py`. Simply run it by: 166 | 167 | ```bash 168 | python ./app_main.py 169 | ``` 170 | 171 | Redirect all its output to a log file called `task2-1.log` and submit it. You should log all the standard, debugging and error outputs. 172 | 173 | #### Task 2-2 (20%): Testing Extended Morpheus Client (Baseline) 174 | 175 | The default setting of the `app_main.py` has turned on the neural network extension. Read the code and comments, and try to turn off the neural network extension. Run this baseline client without neural network extension and redirect all its output to a log file called `task2-2.log` and submit it. You should log all the standard, debugging and error outputs. 176 | 177 | > Hint: No heavy coding is required. You only need to slightly modify the `app_main.py` file and run it again. 178 | 179 | ## Problem 3 (30%): Comparison and Result Analysis 180 | 181 | Notation: we hereinafter refer the client with neural network *enabled* as the "extended" version, and the one with neural network *disabled* as the "baseline" version. 182 | 183 | Compare and analyze the two log files from problem 2 and try to ***briefly*** answer the following questions: 184 | 185 | 1. (10%) Do the two versions both generate the desired correct solutions? According to your observations, which one runs faster? You can use the `time` command to measure the accurate time cost, if you are not sure about it. 186 | 2. (20%) The extended version is actually using more information than the baseline version, i.e., the natural language descriptions. Based on your analysis, which part (i.e., language unit, e.g., a word, a phrase, a sentence, a paragraph etc.) of the question description (see the `question` field of `request_config` object in `app_main.py`) contributes the most to the speed-up/speed-down of the extended version? Provide your conjecture on how to find out the most critical part of the description. 187 | 3. (0%) 🤠: Try out other benchmarks by modifying the hard-coded `request_config` object in `app_main.py`. Does the neural network extension always help? If not, what are the potential threats to validity? 188 | 189 | Submit your answers/thoughts via a file called `task3.txt`. 190 | 191 | -------------------------------------------------------------------------------- /homework/hw3/res/example-question.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/homework/hw3/res/example-question.png -------------------------------------------------------------------------------- /homework/hw3/res/morpheus-dsl-example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/homework/hw3/res/morpheus-dsl-example.png -------------------------------------------------------------------------------- /homework/hw3/res/morpheus-dsl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/homework/hw3/res/morpheus-dsl.png -------------------------------------------------------------------------------- /lectures/lecture1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/lectures/lecture1.pdf -------------------------------------------------------------------------------- /lectures/lecture10.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/lectures/lecture10.pdf -------------------------------------------------------------------------------- /lectures/lecture11.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/lectures/lecture11.pdf -------------------------------------------------------------------------------- /lectures/lecture12.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/lectures/lecture12.pdf -------------------------------------------------------------------------------- /lectures/lecture13.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/lectures/lecture13.pdf -------------------------------------------------------------------------------- /lectures/lecture2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/lectures/lecture2.pdf -------------------------------------------------------------------------------- /lectures/lecture3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/lectures/lecture3.pdf -------------------------------------------------------------------------------- /lectures/lecture4.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/lectures/lecture4.pdf -------------------------------------------------------------------------------- /lectures/lecture5.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/lectures/lecture5.pdf -------------------------------------------------------------------------------- /lectures/lecture6.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/lectures/lecture6.pdf -------------------------------------------------------------------------------- /lectures/lecture7.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/lectures/lecture7.pdf -------------------------------------------------------------------------------- /lectures/lecture8.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/lectures/lecture8.pdf -------------------------------------------------------------------------------- /lectures/lecture9.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/lectures/lecture9.pdf -------------------------------------------------------------------------------- /poster/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/poster/.DS_Store -------------------------------------------------------------------------------- /poster/Makefile: -------------------------------------------------------------------------------- 1 | TARGETS = muse.pdf 2 | 3 | all: $(TARGETS) 4 | 5 | %.pdf: %.tex Makefile 6 | pdflatex --enable-write18 $< && pdflatex $< && pdflatex $< 7 | 8 | clean: 9 | rm -f *.aux *.bbl *.blg *.log $(TARGETS) 10 | -------------------------------------------------------------------------------- /poster/baposter.cls: -------------------------------------------------------------------------------- 1 | %% 2 | %% This is file `baposter.cls' 3 | %% 4 | %% A relatively comfortable latex class to produce posters with a grid based 5 | %% layout. It comes with a number of combinable styles and is (maybe only for 6 | %% the writer) easy to extend, as all the graphics is based on pgf. 7 | %% 8 | %% It is meant to be used with pdftex, but might also work with pslatex if you 9 | %% are not interested in things like transparency. 10 | %% 11 | %% Copyright (C) 2007-2011 Brian Amberg 12 | %% Copyright (C) 2011 Reinhold Kainhofer 13 | %% 14 | %% 29. September 2011: 15 | %% - Finally fixed confusion with paper size handling and landscape. This required seperate handling of papersizes 16 | %% known to the geometry package and other packages. 17 | %% 26. September 2011: 18 | %% - Reverted drawing of faded borders to manual method, as the current result does not work with evince, 19 | %% and produced spurious colored boxes with okular and acroread. 20 | %% - Added one more example due to popular request 21 | %% 16. September 2011: 22 | %% - Removed nag package, such that it compiles on older systems 23 | %% - Added more examples 24 | %% 15. September 2011: 25 | %% - Merged fork by (rk) back into mainline, essentially taking over all the great improvements that Reinhold Kainhofer coded. 26 | %% We call this version 2, as it breaks the interface in some small points. Essentially watch out for this: 27 | %% - no/yes keys are now false/true 28 | %% - the shade-lr etc. keys have the hypen removed, and are now called shadelr etc. 29 | % - Added more examples, which are all adapted to work with the current version 30 | %% 27. August 2011 (rk): 31 | %% - Completely factored out all drawing commands to handler functions, assigned via choice keys 32 | %% - Added cornerradius, boxheaderheight, boxpadding options 33 | %% - Added missing roundedright 34 | %% 26. August 2011 (rk): 35 | %% - Turned headerbox cmd into posterbox environment (allows verbatim) 36 | %% - pass several options to packages 37 | %% - added debug cls option to reduce default output 38 | %% - rewrote several loops and ifthenelse 39 | %% - Use boolean and choice keys for all options 40 | %% - Changed all choice options to set a global function to 41 | %% \baposter@OPTION@OPTIONVALUE, which are a functions that execute the 42 | %% option's setting (drawing routine, color setting for tikz, etc.) 43 | %% - Add a5paper 44 | %% 07. April 2011: Fixed paper size handling 45 | %% - Fixed Paper Size handling, you can now specify all page sizes using paperwidth=, paperheight= class options. 46 | %% - Added rudimentary documentation of the available keys. 47 | %% 11. December 2010: Fixed "Empty Second Page" bug 48 | %% - A second empty page was introduced when a document ended with 49 | %% \end{poster} 50 | %% \end{document} 51 | %% This was fixed thanks to a suggestion by Martin Aulbach 52 | %% - Added 53 | %% \thispagestyle{empty} 54 | %% to suppress page numbers, which became visible when the margins are large. 55 | %% The underlying problem of page-size handling has not yet been solved. 56 | %% 30. September 2010: Border Bugfixes 57 | %% - Correct background color with textborder=rounded-small, Thanks to Ke Chen for the bugreport and patch 58 | %% - Correctly draw rectangular text boxes, Thanks to abenkst for the bugreport and fix 59 | %% 10. June 2010: Added option to set the number of columns 60 | %% - added a class option to set the number of columns 61 | %% - columns=5: sets the number of columns to 5, possible values are 1..6, default is 3 in portrait and 4 in landscape format 62 | %% 29. April 2009: Incorporated Patches by Arne Henningsen 63 | %% - added some class options 64 | %% - a4shrink: shrink the paper to A4 size (for printing drafts or handouts) 65 | %% - movebody=Xpt: move the text/poster body Xpt to the right 66 | %% (or to the left if Xpt is negative), 67 | %% e.g. for manually centering the poster on the page 68 | %% - showframe: use the "showframe" option of the "geometry" package 69 | %% - a0paper (default): set paper size to A0 70 | %% - archE: set paper size to Arch E 71 | %% - setting "background" can be "none" now (otherwise the "showframe" 72 | %% option has no effect) 73 | %% - the page number has been removed (it was mostly not visible before) 74 | %% - the "margin=" option works now 75 | %% 04. December 2008 76 | %% - Mainly an update to the landscape example 77 | %% 14. November 2008 78 | %% - Actually center the title when eyecatcher is used. 79 | %% 04. November 2008 80 | %% - Fixed bug with eyecatcher not working. 81 | %% 26. June 2008 82 | %% - Fixed bug with plain background mode. 83 | %% 14. June 2008 84 | %% - Support for portrait/landscape switching. 85 | %% - Some smaller bugfixes. 86 | %% 01. June 2007 87 | %% - First version released. 88 | %% 89 | %% Use this class with pdflatex 90 | %% 91 | %% I have confirmed that this package works with 92 | %% - texlive 2007 and 93 | %% - miktex 2.7 94 | %% 95 | %% It does not seem to work with 96 | %% - miktex 2.2 97 | %% - some old versions of tetex 98 | %% 99 | %% 100 | %% TODO: 101 | %% -) Rename backgrounds back to shaded-tb shade-lr 102 | %% -) Rename textborder back to rounded-small (consistent naming needed!) 103 | %% -) Rename headershade back to shade-lr, shade-tb, shade-tb-inverse 104 | %% -) Rename headershape back to small-rounded 105 | %% -) Option value consistency (small-rounded vs. rounded-small; missing ones) 106 | %% -) Rename \baposterHeaderSetShade, \baposterHeaderDrawText to include @ and verb 107 | %% 108 | %% 109 | %% Licence: GPL 110 | \ProvidesClass{baposter}[2011/11/26 v2.0 baposter class] 111 | \NeedsTeXFormat{LaTeX2e}[1995/06/01] 112 | \LoadClass{article} 113 | \typeout{baposter: Brian Amberg, 2007, 2008, 2009, 2010, 2011 | http://www.brian-amberg.de/uni/poster/} 114 | \typeout{baposter: Reinhold Kainhofer, 2011 | http://reinhold.kainhofer.com/} 115 | 116 | %% Define lengths only once on inclusion, such that we can make multiple posters 117 | \newlength{\baposter@basepaperwidth} 118 | \newlength{\baposter@basepaperheight} 119 | \newlength{\baposter@basemargin} 120 | \newlength{\baposter@finalpaperwidth} 121 | \newlength{\baposter@finalpaperheight} 122 | \newlength{\baposter@finalmargin} 123 | \newlength{\headerheight}% 124 | \newlength{\colwidth}% 125 | \newlength{\colheight}% 126 | \newlength{\baposter@@colspacing}% 127 | \newlength{\baposter@box@@cornerradius}% 128 | \newlength{\baposter@box@@boxheaderheight}% 129 | \newlength{\baposter@box@@boxpadding}% 130 | \newlength{\boxstartx}% 131 | \newlength{\boxstarty}% 132 | \newlength{\boxwidth}% 133 | \newlength{\boxheight}% 134 | \newlength{\baposter@titleimage@left@width}% 135 | \newlength{\baposter@titleimage@right@width}% 136 | \newlength{\baposter@titleimage@textwidth}% 137 | \newbox\baposter@box@content% 138 | \newbox\baposter@titleimage@left% 139 | \newbox\baposter@titleimage@title% 140 | \newbox\baposter@titleimage@right% 141 | 142 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 143 | % Packages 144 | %------------------------------------------------------------------------------- 145 | % The only ``weird'' dependency of this package is pgf. All the rest should be 146 | % installed on any decent system. 147 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 148 | \typeout{Use Packages} 149 | \RequirePackage{xkeyval} 150 | \RequirePackage{calc} 151 | \RequirePackage[cmyk]{xcolor} 152 | \RequirePackage{tikz} 153 | \RequirePackage{pgf} 154 | \RequirePackage{ifthen} 155 | \RequirePackage[T1]{fontenc} 156 | %\RequirePackage[l2tabu, orthodox]{nag} 157 | \usetikzlibrary{decorations} 158 | \usetikzlibrary{fadings} 159 | \usetikzlibrary{snakes} 160 | \usetikzlibrary{calc} 161 | 162 | 163 | 164 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 165 | % Settings 166 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 167 | 168 | % Choose a smaller value for larger fonts 169 | \newcommand{\baposter@fontscale}{0.292} 170 | 171 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 172 | % Zoom 173 | %------------------------------------------------------------------------------- 174 | % We scale the page from fontscale * papersize up to papersize 175 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 176 | 177 | 178 | %% Paper sizes 179 | \newif\if@landscape 180 | \newif\if@geometryKnowsThisSize 181 | \DeclareOptionX{landscape}{\@landscapetrue} 182 | \DeclareOptionX{portrait}{} 183 | 184 | \newcommand{\baposter@setfinalpapersize}[2]{% 185 | \if@geometryKnowsThisSize 186 | \setlength{\baposter@finalpaperwidth}{#1}% 187 | \setlength{\baposter@finalpaperheight}{#2}% 188 | \else 189 | \if@landscape 190 | % Transpose length, if geometry does not handle the papersize based on the key 191 | \setlength{\baposter@finalpaperwidth}{#2}% 192 | \setlength{\baposter@finalpaperheight}{#1}% 193 | \else 194 | \setlength{\baposter@finalpaperwidth}{#1}% 195 | \setlength{\baposter@finalpaperheight}{#2}% 196 | \fi 197 | \fi 198 | } 199 | 200 | % Default paperwidth and paperheight = a0paper 201 | \DeclareOptionX{paperwidth}[841mm]{\setlength{\baposter@finalpaperwidth}{#1}} 202 | \DeclareOptionX{paperheight}[1189mm]{\setlength{\baposter@finalpaperheight}{#1}} 203 | \DeclareOptionX{archA} { \baposter@setfinalpapersize{9in}{12in}}% 204 | \DeclareOptionX{archB} { \baposter@setfinalpapersize{12in}{18in}}% 205 | \DeclareOptionX{archC} { \baposter@setfinalpapersize{18in}{24in}}% 206 | \DeclareOptionX{archD} { \baposter@setfinalpapersize{24in}{36in}}% 207 | \DeclareOptionX{archE} { \baposter@setfinalpapersize{36in}{48in}}% 208 | \DeclareOptionX{archE1} { \baposter@setfinalpapersize{30in}{42in}}% 209 | \DeclareOptionX{archE2} { \baposter@setfinalpapersize{26in}{38in}}% 210 | \DeclareOptionX{archE3} { \baposter@setfinalpapersize{27in}{39in}}% 211 | \DeclareOptionX{a0paper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{841mm}{1189mm}}%g 212 | \DeclareOptionX{a1paper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{594mm}{841mm}}%g 213 | \DeclareOptionX{a2paper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{420mm}{594mm}}%g 214 | \DeclareOptionX{a3paper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{297mm}{420mm}}%g 215 | \DeclareOptionX{a4paper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{210mm}{297mm}}%g 216 | \DeclareOptionX{a5paper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{148mm}{210mm}}%g 217 | \DeclareOptionX{a6paper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{105mm}{148mm}}%g 218 | \DeclareOptionX{b0paper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{1000mm}{1414mm}}%g 219 | \DeclareOptionX{b1paper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{707mm}{1000mm}}%g 220 | \DeclareOptionX{b2paper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{500mm}{707mm}}%g 221 | \DeclareOptionX{b3paper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{353mm}{500mm}}%g 222 | \DeclareOptionX{b4paper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{250mm}{353mm}}%g 223 | \DeclareOptionX{b5paper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{176mm}{250mm}}%g 224 | \DeclareOptionX{b6paper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{125mm}{176mm}}%g 225 | \DeclareOptionX{ansiapaper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{8.5in}{11in}}% 226 | \DeclareOptionX{ansibpaper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{11in}{17in}}% 227 | \DeclareOptionX{ansicpaper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{17in}{22in}}% 228 | \DeclareOptionX{ansidpaper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{22in}{34in}}% 229 | \DeclareOptionX{ansiepaper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{34in}{44in}}% 230 | \DeclareOptionX{letterpaper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{8.5in}{11in}}% 231 | \DeclareOptionX{legalpaper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{8.5in}{14in}}% 232 | \DeclareOptionX{executivepaper}{\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{7.25in}{10.5in}}% 233 | \DeclareOptionX{screen} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{225mm}{180mm}}%g 234 | 235 | % Margin 236 | \setlength{\baposter@finalmargin}{1.5cm} 237 | \DeclareOptionX{fontscale}[0.292]{\renewcommand{\baposter@fontscale}{#1}} 238 | \DeclareOptionX{margin} [1.5cm]{\setlength{\baposter@finalmargin}{#1}} 239 | 240 | % move text/poster body to the right (or to the left if negative) 241 | \newlength{\baposter@movebody} 242 | \setlength{\baposter@movebody}{0cm} 243 | \DeclareOptionX{movebody}[0cm]{\setlength{\baposter@movebody}{#1}} 244 | 245 | 246 | \newif\if@debug 247 | \DeclareOptionX{debug}{\@debugtrue} 248 | %% Will be passed on to other packages (xcolor and geometry), still we don't want unused warnings 249 | \DeclareOptionX{table}{} 250 | \DeclareOptionX{showframe}{} 251 | 252 | \ProcessOptionsX 253 | 254 | \if@debug 255 | \newcommand{\debug}[1]{\typeout{#1}} 256 | \else 257 | \newcommand{\debug}[1]{} 258 | \fi 259 | 260 | 261 | 262 | \setlength{\baposter@basepaperwidth} {\baposter@fontscale\baposter@finalpaperwidth } 263 | \setlength{\baposter@basepaperheight}{\baposter@fontscale\baposter@finalpaperheight} 264 | \setlength{\baposter@basemargin} {\baposter@fontscale\baposter@finalmargin} 265 | \newlength{\baposter@basemarginright} 266 | \setlength{\baposter@basemarginright}{\baposter@basemargin} 267 | \addtolength{\baposter@basemarginright}{-\baposter@fontscale\baposter@movebody} 268 | \newlength{\baposter@basemarginleft} 269 | \setlength{\baposter@basemarginleft}{\baposter@basemargin} 270 | \addtolength{\baposter@basemarginleft}{\baposter@fontscale\baposter@movebody} 271 | 272 | \typeout{Paperwidth=\the\baposter@finalpaperwidth} 273 | \typeout{Paperheight=\the\baposter@finalpaperheight} 274 | \typeout{BasePaperwidth=\the\baposter@basepaperwidth} 275 | \typeout{BasePaperheight=\the\baposter@basepaperheight} 276 | \usepackage[ 277 | paperwidth=\baposter@basepaperwidth, 278 | paperheight=\baposter@basepaperheight, 279 | tmargin=\baposter@basemargin, 280 | bmargin=\baposter@basemargin, 281 | lmargin=\baposter@basemarginleft, 282 | rmargin=\baposter@basemarginright, 283 | ]{geometry} 284 | 285 | \usepackage{pgfpages} 286 | \if@landscape 287 | \if@geometryKnowsThisSize 288 | \pgfpagesuselayout{resize to}[physical paper width=\baposter@finalpaperheight,physical paper height=\baposter@finalpaperwidth] 289 | \else 290 | \pgfpagesuselayout{resize to}[physical paper width=\baposter@finalpaperwidth,physical paper height=\baposter@finalpaperheight] 291 | \fi 292 | \else 293 | \pgfpagesuselayout{resize to}[physical paper width=\baposter@finalpaperwidth,physical paper height=\baposter@finalpaperheight] 294 | \fi 295 | 296 | 297 | 298 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 299 | % Default functions for borders/backgrounds 300 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 301 | 302 | %% These functions will all be redefined from the actual option values. In 303 | %% particular, they will be set to \baposter@optionname@optionvalue, which 304 | %% should do the actual work / setting for that particular optionvalue. 305 | 306 | \newcommand{\baposterPosterDrawBackground}[2]{} % Draw poster background 307 | 308 | \newcommand{\baposterBoxGetShape}{} % Returns path of text box shape 309 | \newcommand{\baposterBoxDrawBackground}[2]{} % Draw bg of boxes 310 | \newcommand{\baposterBoxDrawBorder}[1]{} % Draw border of individual boxes 311 | 312 | \newcommand{\baposterHeaderGetShape}{} % Returns path of text box shape 313 | \newcommand{\baposterHeaderSetShade}[3]{} % Set bg style for box headers 314 | \newcommand{\baposterHeaderDrawBackground}[3]{} % Draw background of box header 315 | \newcommand{\baposterHeaderDrawBorder}[1]{} % Draw border of box header 316 | \newcommand{\baposterHeaderDrawText}[1]{} % Draw text inside box header 317 | 318 | \newcommand{\@@previousbox}{notset} % stores the previously processed box for below=auto 319 | 320 | % Function to set a user-defined background 321 | \newcommand{\baposter@backgroundCmd}{\error{No background command defined. Use \background{...} to define background}} 322 | \newcommand{\background}[1]{\renewcommand{\baposter@backgroundCmd}{#1}} 323 | 324 | 325 | 326 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 327 | % Handle poster and box options 328 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 329 | 330 | \debug{Handling keys} 331 | 332 | %% 333 | %% POSTER OPTIONS 334 | %% 335 | %% Store all poster options in variables of the form \baposter@option 336 | %% choose-keys also store the index in \baposter@optionnr 337 | %% choose-keys typically also assign a function 338 | \definecolor{baposter@silver}{cmyk}{0,0,0,0.7} 339 | \define@boolkey[ba]{poster}[baposter@]{grid} [false] {} 340 | \define@boolkey[ba]{poster}[baposter@]{eyecatcher} [true] {} 341 | \define@cmdkey [ba]{poster}[baposter@]{headerheight} [0.1\textheight]{} 342 | \define@cmdkey [ba]{poster}[baposter@]{columns} [{}] {} 343 | \define@cmdkey [ba]{poster}[baposter@]{colspacing} [1em] {} 344 | \define@cmdkey [ba]{poster}[baposter@]{bgColorOne} [baposter@silver]{} 345 | \define@cmdkey [ba]{poster}[baposter@]{bgColorTwo} [green] {} 346 | 347 | % background can be one of: shadeLR, shadeTB, plain, user, none 348 | \define@choicekey*+[ba]{poster}{background}% 349 | [\baposter@background\baposter@backgroundnr]% 350 | {shadeLR, shadeTB, plain, user, none} [plain] {% 351 | \debug{Poster background: \baposter@background} 352 | \renewcommand{\baposterPosterDrawBackground}[2]{ 353 | \csname baposter@background@\baposter@background\endcsname{##1}{##2}} 354 | }{ 355 | \PackageWarning{baposter}{Unknown background `\baposter@background' (use 356 | shadeLR, shadeTB, plain, none, or user). If user is used, you also 357 | have to define \background{...}.} 358 | \renewcommand{\baposterPosterDrawBackground}[2]{\baposter@background@none{##1}{##2}} 359 | } 360 | 361 | 362 | %% 363 | %% BOX OPTIONS 364 | %% 365 | \define@cmdkey[ba]{posterbox}[baposter@box@]{cornerradius} [1em] {} 366 | \define@cmdkey[ba]{posterbox}[baposter@box@]{boxheaderheight} [2em] {} 367 | \define@cmdkey[ba]{posterbox}[baposter@box@]{boxpadding} [0.5em] {} 368 | 369 | 370 | % textborder can be one of: none, bars, coils, triangles, rectangle, rounded, 371 | % roundedleft, roundedsmall, faded; UNIMPLEMENTED: roundedright 372 | \edef\baposter@box@textborder@validvalues{none,bars,coils,triangles,rectangle,rounded,roundedleft,roundedsmall,faded} 373 | \define@choicekey*+[ba]{posterbox}{textborder}% 374 | [\baposter@box@textborder\baposter@box@textbordernr]% 375 | {none,bars,coils,triangles,rectangle,rounded,roundedleft,roundedright,roundedsmall,faded} [rectangle] {% 376 | \debug{Text border: \baposter@box@textborder} 377 | \renewcommand{\baposterBoxGetShape}{ 378 | \csname baposter@box@boxshape@\baposter@box@textborder\endcsname} 379 | \renewcommand{\baposterBoxDrawBorder}[1]{ 380 | \csname baposter@box@drawborder@\baposter@box@textborder\endcsname{##1}} 381 | }{ 382 | \PackageWarning{baposter}{Unknown text-border style `\baposter@box@textborder'. 383 | Edit your file to choose a valid option (\baposter@box@textborder@validvalues).} 384 | \renewcommand{\baposterBoxGetShape}{\baposter@boxshape@rectangle} 385 | \renewcommand{\baposterBoxDrawBorder}[1]{\baposter@drawborder@rectangle{##1}} 386 | } 387 | 388 | % boxshade can be one of: shadeLR, shadeTB, plain, none 389 | \define@choicekey*+[ba]{posterbox}{boxshade}% 390 | [\baposter@box@boxshade\baposter@box@boxshadenr]% 391 | {shadelr,shadetb,plain,none} [none] {% 392 | \debug{Box shade: \baposter@box@boxshade} 393 | \renewcommand{\baposterBoxDrawBackground}[2]{ 394 | \csname baposter@box@drawbackground@\baposter@box@boxshade\endcsname{##1}{##2}} 395 | }{ 396 | \PackageWarning{baposter}{Unknown boxshade style `\baposter@boxshade'. 397 | Edit your file to choose a valid option.} 398 | \renewcommand{\baposterBoxDrawBackground}[2]{\baposter@box@drawbackground@none{##1}{##2}} 399 | } 400 | 401 | % headershade can be one of: shade-lr, shade-tb, shade-tb-inverse, plain 402 | \define@choicekey*+[ba]{posterbox}{headershade}% 403 | [\baposter@box@headershade\baposter@box@headershadenr]% 404 | {shadelr, shadetb, shadetbinverse, plain} [shadelr] {% 405 | \debug{Header shade: \baposter@box@headershade} 406 | \renewcommand{\baposterHeaderSetShade}[3]{ 407 | \csname baposter@box@headershade@\baposter@box@headershade\endcsname{##1}{##2}{##3}} 408 | }{ 409 | \PackageWarning{baposter}{Unknown headershade style `\baposter@box@headershade'. 410 | Edit your file to choose a valid option.} 411 | \renewcommand{\baposterHeaderSetShade}[3]{\baposter@box@headershade@none{##1}{##2}{##3}} 412 | } 413 | 414 | % headershape can be one of: rectangle, rounded, smallrounded, roundedleft, roundedright 415 | \define@choicekey*+[ba]{posterbox}{headershape}% 416 | [\baposter@box@headershape\baposter@box@headershapenr]% 417 | {rectangle,rounded,smallrounded,roundedleft,roundedright} [roundedright] {% 418 | \debug{Header shape: \baposter@box@headershape} 419 | \renewcommand{\baposterHeaderGetShape}{ 420 | \csname baposter@box@headershape@\baposter@box@headershape\endcsname} 421 | \renewcommand{\baposterHeaderDrawText}[1]{ 422 | \csname baposter@box@headerdrawtext@\baposter@box@headershape\endcsname{##1}} 423 | \renewcommand{\baposterHeaderDrawBorder}[1]{ 424 | \csname baposter@box@headerdrawborder@\baposter@box@headershape\endcsname{##1}} 425 | }{ 426 | \PackageWarning{baposter}{Unknown headershape style `\baposter@headershape'. 427 | Edit your file to choose a valid option.} 428 | \renewcommand{\baposterHeaderGetShape}{\baposter@box@headershape@rectangle} 429 | \renewcommand{\baposterHeaderDrawText}[1]{\baposter@box@headerdrawtext@rectangle{##1}} 430 | \renewcommand{\baposterHeaderDrawBorder}[1]{\baposter@box@headerdrawborder@rectangle{##1}} 431 | } 432 | 433 | % headerborder can be one of: open, closed, none 434 | \define@choicekey*+[ba]{posterbox}{headerborder}% 435 | [\baposter@box@headerborder\baposter@box@headerbordernr]% 436 | {open,closed,none} [open] {% 437 | \debug{Header border: \baposter@box@headerborder} 438 | % \renewcommand{\baposterHeaderBorder}{ 439 | % \csname baposter@headerborder@\baposter@box@headerborder\endcsname} 440 | }{ 441 | \PackageWarning{baposter}{Unknown headerborder style `\baposter@headerborder'. 442 | Edit your file to choose a valid option.} 443 | % \renewcommand{\baposterHeaderBorder}{\baposter@box@headerborder@rectangle} 444 | } 445 | 446 | 447 | \define@cmdkey[ba]{posterbox}[baposter@box@]{borderColor} [yellow] {} 448 | \define@cmdkey[ba]{posterbox}[baposter@box@]{headerColorOne} [red] {} 449 | \define@cmdkey[ba]{posterbox}[baposter@box@]{headerColorTwo} [brown] {} 450 | \define@cmdkey[ba]{posterbox}[baposter@box@]{headerFontColor} [black] {} 451 | \define@cmdkey[ba]{posterbox}[baposter@box@]{boxColorOne} [magenta] {} 452 | \define@cmdkey[ba]{posterbox}[baposter@box@]{boxColorTwo} [cyan] {} 453 | \define@cmdkey[ba]{posterbox}[baposter@box@]{headerfont} [\scshape\Large] {} 454 | \define@cmdkey[ba]{posterbox}[baposter@box@]{textfont} [{}] {} 455 | 456 | \define@cmdkey[ba]{posterbox}[baposter@box@]{linewidth} [2pt] {} 457 | 458 | \define@cmdkey[ba]{posterbox}[baposter@box@]{below} [notset]{} 459 | \define@cmdkey[ba]{posterbox}[baposter@box@]{above} [notset]{} 460 | \define@cmdkey[ba]{posterbox}[baposter@box@]{aligned}[notset]{} 461 | \define@cmdkey[ba]{posterbox}[baposter@box@]{bottomaligned}[notset]{} 462 | \define@cmdkey[ba]{posterbox}[baposter@box@]{column} [0] {} 463 | \define@cmdkey[ba]{posterbox}[baposter@box@]{row} [0] {} 464 | \define@cmdkey[ba]{posterbox}[baposter@box@]{span} [1] {} 465 | \define@cmdkey[ba]{posterbox}[baposter@box@]{height} [auto] {} 466 | \define@cmdkey[ba]{posterbox}[baposter@box@]{name} [noname]{} 467 | 468 | % Set some default values, the poster and posterbox environments can override: 469 | \setkeys[ba]{poster}{ 470 | % Debug grid 471 | grid=false, 472 | % Is there an eyecatcher image 473 | eyecatcher=true, 474 | columns={}, 475 | % Colours 476 | bgColorOne=baposter@silver, 477 | bgColorTwo=green, 478 | % 479 | colspacing=1em, 480 | headerheight=0.1\textheight, 481 | background=shadeLR, 482 | }{} 483 | \setkeys[ba]{posterbox}{ 484 | % Position 485 | column=0,row=0,span=1, 486 | below=notset,above=notset, 487 | bottomaligned=notset, 488 | aligned=notset, 489 | height=auto, 490 | % Name 491 | name=noname, 492 | % Box design: border: 493 | linewidth=2pt, 494 | borderColor=yellow, 495 | cornerradius=1em, 496 | % text box: 497 | textfont={}, 498 | boxshade=plain, 499 | boxColorOne=magenta, 500 | boxColorTwo=cyan, 501 | textborder=faded, 502 | boxpadding=0.5em, 503 | % header 504 | headerfont=\scshape\Large,% or headerfont=\color{white}\textsf\textbf 505 | headerFontColor=black, 506 | headerColorOne=red, 507 | headerColorTwo=brown, 508 | headershape=rectangle, 509 | headershade=shadeLR, 510 | headerborder=none, 511 | boxheaderheight=2em, 512 | }{} 513 | 514 | 515 | 516 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 517 | %%% Background options and functions (one function for each possible value) 518 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 519 | 520 | \newcommand{\baposter@background@shadelr}[2]{ 521 | \debug{BAPOSTER: Using shade left right background.} 522 | \begin{tikzpicture}[remember picture,overlay]% 523 | \shade [shading=axis,left color=#1,right color=#2] (current page.north west) 524 | rectangle(current page.south east); 525 | \end{tikzpicture}% 526 | } 527 | \newcommand{\baposter@background@shadetb}[2]{ 528 | \debug{BAPOSTER: Using shade top to bottom background.} 529 | \begin{tikzpicture}[remember picture,overlay]% 530 | \shade [shading=axis,top color=#1,bottom color=#2] (current page.north west) 531 | rectangle(current page.south east); 532 | \end{tikzpicture}% 533 | } 534 | \newcommand{\baposter@background@plain}[2]{ 535 | \debug{BAPOSTER: Using plain background.} 536 | \begin{tikzpicture}[remember picture,overlay]% 537 | \fill [fill=#1] (current page.north west) rectangle(current page.south east); 538 | \end{tikzpicture}% 539 | } 540 | \newcommand{\baposter@background@user}[2]{ 541 | \debug{BAPOSTER: Using user background.} 542 | \baposter@backgroundCmd% 543 | } 544 | \newcommand{\baposter@background@none}[2]{ 545 | \debug{BAPOSTER: Using no background.} 546 | } 547 | 548 | 549 | 550 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 551 | %%% Return shape path of text box (depending on the box shape) 552 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 553 | 554 | \newcommand{\baposter@box@boxshape@none}{\baposter@box@boxshape@rectangle} 555 | \newcommand{\baposter@box@boxshape@bars}{ 556 | (\baposter@box@name tnw) -- (\baposter@box@name sw) % 557 | (\baposter@box@name se) -- (\baposter@box@name tne) 558 | } 559 | \newcommand{\baposter@box@boxshape@coils}{\baposter@box@boxshape@bars} 560 | \newcommand{\baposter@box@boxshape@triangles}{\baposter@box@boxshape@bars} 561 | \newcommand{\baposter@box@boxshape@rectangle}{ 562 | (\baposter@box@name tnw) -- (\baposter@box@name sw) -- % 563 | (\baposter@box@name se) -- (\baposter@box@name tne)% 564 | } 565 | \newcommand{\baposter@box@boxshape@faded}{ 566 | (\baposter@box@name tnw) -- (\baposter@box@name sw) % 567 | (\baposter@box@name tne) -- (\baposter@box@name se) 568 | } 569 | \newcommand{\baposter@box@boxshape@rounded}{ 570 | [rc] \baposter@box@boxshape@rectangle% 571 | } 572 | \newcommand{\baposter@box@boxshape@roundedsmall}{ 573 | [src] \baposter@box@boxshape@rectangle 574 | } 575 | \newcommand{\baposter@box@boxshape@roundedleft}{ 576 | (\baposter@box@name tnw) {[rc]-- (\baposter@box@name sw)} -- % 577 | (\baposter@box@name se) -- (\baposter@box@name tne)% 578 | } 579 | \newcommand{\baposter@box@boxshape@roundedright}{ 580 | (\baposter@box@name tnw) -- (\baposter@box@name sw) {[rc]-- % 581 | (\baposter@box@name se)} -- (\baposter@box@name tne)% 582 | } 583 | 584 | 585 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 586 | %%% Draw box background (one function for each possible value) 587 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 588 | 589 | % These functions take no arguments 590 | \newcommand{\baposter@box@drawbackground@none}[2]{ 591 | \tikzstyle{box colors}=[] 592 | } 593 | \newcommand{\baposter@box@drawbackground@plain}[2]{ 594 | \tikzstyle{box colors}=[fill=#1] 595 | \fill[box colors] \baposterBoxGetShape; 596 | } 597 | \newcommand{\baposter@box@drawbackground@shadelr}[2]{ 598 | \tikzstyle{box colors}=[shading=axis, left color=#1, right color=#2]% 599 | \fill[box colors] \baposterBoxGetShape; 600 | } 601 | \newcommand{\baposter@box@drawbackground@shadetb}[2]{ 602 | \tikzstyle{box colors}=[shading=axis, top color=#1, bottom color=#2]% 603 | \fill[box colors] \baposterBoxGetShape; 604 | } 605 | 606 | 607 | 608 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 609 | %%% Draw box border 610 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 611 | 612 | % These functions take two arguments: borderColor 613 | \newcommand{\baposter@box@drawborder@none}[1]{} 614 | \newcommand{\baposter@box@drawborder@bars}[1]{ 615 | \draw[color=#1] \baposterBoxGetShape;% 616 | } 617 | \newcommand{\baposter@box@drawborder@coils}[1]{ 618 | \draw[color=#1,segment amplitude=0.35em,segment length=0.4em,snake=coil] \baposterBoxGetShape;% 619 | } 620 | \newcommand{\baposter@box@drawborder@triangles}[1]{ 621 | \draw[color=#1,segment amplitude=0.2em,segment length=0.4em,snake=triangles] \baposterBoxGetShape;% 622 | } 623 | \newcommand{\baposter@box@drawborder@rectangle}[1]{ 624 | \draw[color=#1] \baposterBoxGetShape;% 625 | } 626 | \newcommand{\baposter@box@drawborder@rounded}[1]{ 627 | \draw[color=#1] \baposterBoxGetShape;% 628 | } 629 | \newcommand{\baposter@box@drawborder@roundedleft}[1]{ 630 | \draw[color=#1] \baposterBoxGetShape;% 631 | } 632 | \newcommand{\baposter@box@drawborder@roundedright}[1]{ 633 | \draw[color=#1] \baposterBoxGetShape;% 634 | } 635 | \newcommand{\baposter@box@drawborder@faded}[1]{ 636 | % This is the right way to do it, but it does not work with evince, and has problems during printing, so instead we do 637 | %\draw[color=#1,path fading=south] \baposterBoxGetShape;% 638 | % this 639 | \foreach \x in {0,1,...,90} \draw[color=#1!\x] ($(\baposter@box@name tnw)!{(100-\x)/100}!(\baposter@box@name sw)$) -- ($(\baposter@box@name tnw)!{(100-(\x+10))/100}!(\baposter@box@name sw)$);% 640 | \foreach \x in {0,1,...,90} \draw[color=#1!\x] ($(\baposter@box@name tne)!{(100-\x)/100}!(\baposter@box@name se)$) -- ($(\baposter@box@name tne)!{(100-(\x+10))/100}!(\baposter@box@name se)$);% 641 | } 642 | \newcommand{\baposter@box@drawborder@roundedsmall}[1]{ 643 | \draw[color=#1] \baposterBoxGetShape;% 644 | } 645 | 646 | 647 | 648 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 649 | %%% Return shape path of text box (depending on the box shape) 650 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 651 | 652 | % These functions take no arguments 653 | % TODO: For headerborder==none, use (\baposter@box@name outer tnw) instead! 654 | \newcommand{\baposter@box@headershape@rectangle}{% 655 | (\baposter@box@name tnw) -- (\baposter@box@name nw) -- % 656 | (\baposter@box@name ne) -- (\baposter@box@name tne)% 657 | } 658 | \newcommand{\baposter@box@headershape@smallrounded}{% 659 | (\baposter@box@name tnw) {[src] -- (\baposter@box@name nw) -- % 660 | (\baposter@box@name ne)} -- (\baposter@box@name tne)% 661 | } 662 | \newcommand{\baposter@box@headershape@roundedright}{% 663 | (\baposter@box@name tnw) -- (\baposter@box@name nw) {[rc] -- % 664 | (\baposter@box@name ne)} -- (\baposter@box@name tne)% 665 | } 666 | \newcommand{\baposter@box@headershape@roundedleft}{% 667 | (\baposter@box@name tnw) {[rc]-- (\baposter@box@name nw)} -- % 668 | (\baposter@box@name ne) -- (\baposter@box@name tne)% 669 | } 670 | \newcommand{\baposter@box@headershape@rounded}{% 671 | (\baposter@box@name tnw) {[rc] -- (\baposter@box@name nw) -- % 672 | (\baposter@box@name ne) } -- (\baposter@box@name tne)% 673 | } 674 | 675 | 676 | 677 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 678 | %%% Header text drawing (one function for each possible value of headershape) 679 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 680 | 681 | % These functions take one argument: the header text 682 | \newcommand{\baposter@box@headerdrawtext@rectangle}[1]{ 683 | \path (\baposter@box@name nw) +(0em,-0.5\baposter@box@@boxheaderheight) node[anchor=west,inner sep=0.4em] {#1};% 684 | } 685 | \newcommand{\baposter@box@headerdrawtext@smallrounded}[1]{ 686 | \path (\baposter@box@name nw) +(0.5\boxwidth,-0.5\baposter@box@@boxheaderheight) node[anchor=center] {#1};% 687 | } 688 | \newcommand{\baposter@box@headerdrawtext@roundedright}[1]{ 689 | \path (\baposter@box@name nw) +(0em,-0.5\baposter@box@@boxheaderheight)% 690 | node[anchor=west,inner sep=0.4em,text depth=0.0em] {#1};% 691 | } 692 | \newcommand{\baposter@box@headerdrawtext@roundedleft}[1]{ 693 | \path (\baposter@box@name nw) +(0em,-0.5\baposter@box@@boxheaderheight)% 694 | node[anchor=west,inner sep=0.4em] {#1};% 695 | } 696 | \newcommand{\baposter@box@headerdrawtext@rounded}[1]{ 697 | \path (\baposter@box@name nw) +(0.5\boxwidth,-0.5\baposter@box@@boxheaderheight) node[anchor=center] {#1};% 698 | } 699 | 700 | 701 | 702 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 703 | %%% Header shade options and functions (one function for each possible value) 704 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 705 | 706 | % These functions take two arguments: headerColorOne, headerColorTwo and borderColor 707 | \newcommand{\baposter@box@headershade@shadelr}[3]{ 708 | \debug{Header-Shade: Shade Left - Right} 709 | \tikzstyle{header colors}=[% 710 | color=#3,% 711 | shading=axis,% 712 | left color=#1,% 713 | right color=#2% 714 | ]% 715 | } 716 | \newcommand{\baposter@box@headershade@shadetb}[3]{ 717 | \debug{Header-Shade: Shade Top - Bottom} 718 | \tikzstyle{header colors}=[% 719 | color=#3,% 720 | shading=axis,% 721 | top color=#1,% 722 | bottom color=#2% 723 | ]% 724 | } 725 | \newcommand{\baposter@box@headershade@shadetbinverse}[3]{ 726 | \tikzstyle{header colors}=[% 727 | top color=#1!75!#2,% 728 | bottom color=#2!100!#1,% 729 | shading angle=20% 730 | ]% 731 | \colorlet{baposterHeaderFontColor}{white}% 732 | } 733 | \newcommand{\baposter@box@headershade@plain}[3]{ 734 | \debug{Header-Shade: Plain} 735 | \tikzstyle{header colors}=[% 736 | color=#3,% 737 | fill=#1% 738 | ]% 739 | } 740 | \newcommand{\baposter@box@headershade@none}[3]{ 741 | \debug{Header-Shade: none} 742 | \tikzstyle{header colors}=[] 743 | } 744 | 745 | 746 | 747 | 748 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 749 | %%% The main poster environment 750 | %%% \begin{baposter}{settings}{Eye Catcher}{Title}{Author}{University Logo} 751 | %%%----------------------------------------------------------------------------- 752 | %%% The settings are 753 | %%% - grid=true,[false]:Show grid to help with alignment 754 | %%% - colspacing=0.7em: Column spacing 755 | %%% - columns=4: number of columns (default 4 in landscape and 3 in portrait format) (maximum number is 6) 756 | %%% - color=[orange]: xcolor color definition used as the main color of the poster 757 | %%% - colortwo=[white]: The other color for gradient based layouts 758 | %%% - textborder=none,bars,coils,triangles,rectangle,rounded,roundedsmall,roundedleft,roundedright,[faded] 759 | %%% The style of the box around the text area 760 | %%% - headerborder=none,closed,open 761 | %%% No extra border around box header, full border around box header or border that is open below. 762 | %%% - headershape=rectangle,rounded,roundedleft,roundedright 763 | %%% Shape of the box-header region 764 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 765 | \newenvironment{poster}[5]{% 766 | \thispagestyle{empty}% Suppress Page Number 767 | \debug{Poster Starts}% 768 | % This setkeys call parses all provided options and depending on the option 769 | % value, assigns different handler functions to the \baposter(Box|Header)* 770 | % functions. Once that is done, we don't have to care about particular 771 | % values for border, shading, etc. All we have to do is call the 772 | % handler functions and let them do their job. 773 | % This also allows the user to override the poster-wide defaults on a per-box 774 | % basis. 775 | \setkeys[ba]{posterbox,poster}{#1}% 776 | % 777 | % TODO: Move all those assignments to the key macros! 778 | % Parse Keys% 779 | \colorlet{bgColorOne}{\baposter@bgColorOne} 780 | \colorlet{bgColorTwo}{\baposter@bgColorTwo} 781 | % 782 | %% Boxes% 783 | \setlength{\headerheight}{\baposter@headerheight}% 784 | \setlength{\colheight}{\textheight-\baposter@headerheight}% 785 | \renewcommand{\@@previousbox}{notset} 786 | 787 | \debug{Format}% 788 | % Set default for columns if unset (4 for landscape, 3 for portrait) 789 | \ifthenelse{\equal{\baposter@columns}{}}{% 790 | \renewcommand{\baposter@columns}{\if@landscape4\else3\fi}% 791 | }{} 792 | % 793 | \debug{Columns: \baposter@columns}% 794 | \setlength{\baposter@@colspacing}{\baposter@colspacing}% 795 | \setlength{\colwidth}{\textwidth}% 796 | \addtolength{\colwidth}{\baposter@@colspacing*(1-\baposter@columns)}% 797 | \ifcase\baposter@columns\relax 798 | \error{You need to have at least one column!} 799 | \or % 1 800 | \setlength{\colwidth}{\colwidth}% 801 | \or % 2 802 | \setlength{\colwidth}{0.5\colwidth}% 803 | \or % 3 804 | \setlength{\colwidth}{0.3333333333333\colwidth}% 805 | \or % 4 806 | \setlength{\colwidth}{0.25\colwidth}% 807 | \or % 5 808 | \setlength{\colwidth}{0.2\colwidth}% 809 | \or % 6 810 | \setlength{\colwidth}{0.16666666666\colwidth}% 811 | \else % >6 812 | \error{You do not want so many columns} 813 | \fi 814 | % 815 | \newcommand{\baposter@reference}{north west}% 816 | % 817 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 818 | % A box with a header and some content. The basic unit of the poster% 819 | %---------------------------------------------------------------------------% 820 | % Each box has a name and can be placed absolutely or relatively.% 821 | % The only inconvenience is that you can only specify a relative position % 822 | % towards an already declared box. So if you have a box attached to the % 823 | % bottom, one to the top and a third one which should be inbetween, you % 824 | % have to specify the top and bottom boxes before you specify the middle % 825 | % box.% 826 | %% 827 | % below= name of other node% 828 | % above= name of other node% 829 | % aligned=name of other node% 830 | % bottomaligned=name of other node% 831 | % column= [0] % 832 | % row= [0] % 833 | % span= [1] % 834 | % height= ,[auto]% 835 | % name= [noname]% 836 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 837 | 838 | % Backward-compatibility definition (\headerbox command uses posterbox env): 839 | \newcommand{\headerbox}[3]{% 840 | \begin{posterbox}[##2]{##1} 841 | ##3 842 | \end{posterbox} 843 | } 844 | 845 | \newenvironment{posterbox}[2][]{% 846 | \debug{Poster box options: ##1}% 847 | % Override the poster-wide defaults on a per-box basis 848 | \setkeys[ba]{posterbox}{##1}% 849 | % 850 | \def\baposter@box@title{##2} 851 | % 852 | \colorlet{borderColor}{\baposter@box@borderColor} 853 | \colorlet{headerColorOne}{\baposter@box@headerColorOne} 854 | \colorlet{headerColorTwo}{\baposter@box@headerColorTwo} 855 | \colorlet{headerFontColor}{\baposter@box@headerFontColor} 856 | \colorlet{boxColorOne}{\baposter@box@boxColorOne} 857 | \colorlet{boxColorTwo}{\baposter@box@boxColorTwo} 858 | % 859 | \setlength{\baposter@box@@cornerradius}{\baposter@box@cornerradius}% 860 | \setlength{\baposter@box@@boxheaderheight}{\baposter@box@boxheaderheight}% 861 | \setlength{\baposter@box@@boxpadding}{\baposter@box@boxpadding}% 862 | 863 | 864 | %% The columns is always given absolute 865 | % boxstartx = column * colwidth + column * colspacing 866 | \setlength{\boxstartx}{(\colwidth+\baposter@@colspacing)*\baposter@box@column}% 867 | % 868 | %% The width is gvien absolute 869 | % Box Width = span * colwidth + (span-1) * colspacing 870 | \setlength{\boxwidth}{\baposter@box@span\colwidth} % 871 | \addtolength{\boxwidth}{\baposter@@colspacing*(\baposter@box@span-1)}% 872 | % 873 | %% Measure the content of the box% 874 | \setbox\baposter@box@content=\hbox\bgroup% 875 | \begin{pgfinterruptpicture}% 876 | \begin{minipage}[t]{\boxwidth-\baposter@box@@boxpadding*2}% 877 | \baposter@box@textfont\bgroup% 878 | }% End of posterbox preamble 879 | %%% HERE COME THE ACTUAL CONTENTS OF THE HEADERBOX ENVIRONMENT 880 | {% posterbox handling after contents (i.e. drawing everything) 881 | \egroup% 882 | \end{minipage}% 883 | \end{pgfinterruptpicture}% 884 | \egroup% 885 | \setlength{\boxheight}{\ht\baposter@box@content}% 886 | \addtolength{\boxheight}{\dp\baposter@box@content}% 887 | \addtolength{\boxheight}{\baposter@box@@boxheaderheight} % Header% 888 | \addtolength{\boxheight}{2\baposter@box@@boxpadding} % Inner Sep 889 | % 890 | \ifthenelse{\equal{\baposter@box@height}{bottom}}{% 891 | }{\ifthenelse{\equal{\baposter@box@height}{auto}}{% 892 | }{ % Neither auto nor bottom% 893 | \setlength{\boxheight}{\baposter@box@height\colheight}% 894 | }}% 895 | % 896 | %% Determine the box position% 897 | \debug{Setting Coordinates}% 898 | \debug{Upper Right}% 899 | \debug{\baposter@box@name}% 900 | % 901 | %%% Upper Right Corner% 902 | % if below=auto, set it to the previous box 903 | % TODO: We should generalize this to the previous box of the used column, 904 | % currently we use the previous box, which might be in a different column 905 | \ifthenelse{\equal{\baposter@box@below}{auto}}{% 906 | \edef\baposter@box@below{\@@previousbox} 907 | \debug{Box \baposter@box@name has below=auto, placing it below box \baposter@box@below.} 908 | }{} 909 | \xdef\@@previousbox{\baposter@box@name} 910 | 911 | \ifthenelse{\not\equal{\baposter@box@below}{notset} }{% 912 | %% Below% 913 | \debug{Below}% 914 | \path[shape=coordinate] (\boxstartx,0pt |- \baposter@box@below se) ++(0pt,-\baposter@@colspacing) coordinate(\baposter@box@name nw);% 915 | }{% 916 | \ifthenelse{\not\equal{\baposter@box@aligned}{notset} }{% 917 | %% Aligned% 918 | \debug{Aligned: \baposter@box@aligned}% 919 | \path[shape=coordinate] (\boxstartx,0pt |- \baposter@box@aligned nw) coordinate(\baposter@box@name nw);% 920 | }{% 921 | %% Fixed% 922 | \debug{Fixed}% 923 | \setlength{\boxstarty}{\baposter@box@row\colheight}% 924 | \path[shape=coordinate] (\boxstartx,\colheight-\boxstarty) coordinate(\baposter@box@name nw);% 925 | }}% 926 | % 927 | %% Lower Left Corner% 928 | \debug{Lower Left}% 929 | \ifthenelse{\equal{\baposter@box@above}{bottom}}{% 930 | %% Above = Bottom% 931 | \debug{Above bottom}% 932 | \ifthenelse{\equal{\baposter@box@below}{notset} \and \equal{\baposter@box@aligned}{notset}}{% 933 | \path[shape=coordinate] (\boxstartx,\boxheight) coordinate(\baposter@box@name nw);% 934 | }{}% 935 | \path[shape=coordinate] (\boxstartx+\boxwidth,0pt) coordinate(\baposter@box@name se);% 936 | }{\ifthenelse{\not \equal{\baposter@box@bottomaligned}{notset}}{% 937 | \path[shape=coordinate] (\boxstartx+\boxwidth,0pt |- \baposter@box@bottomaligned se) coordinate(\baposter@box@name se);% 938 | }{{\ifthenelse{\not \equal{\baposter@box@above}{notset}}{% 939 | %% Above = Node% 940 | \path[shape=coordinate] (\boxstartx+\boxwidth,0pt |- \baposter@box@above nw) +(0pt,\baposter@@colspacing) coordinate(\baposter@box@name se);% 941 | }{% 942 | %% Above = notset% 943 | \debug{Above=not set}% 944 | \ifthenelse{\equal{\baposter@box@height}{bottom}}{% 945 | %% height=bottom% 946 | \debug{height=bottom}% 947 | \path[shape=coordinate] (\boxstartx+\boxwidth,0pt) coordinate(\baposter@box@name se);% 948 | }{ %% height=auto or fixed% 949 | \debug{height=auto or fixed}% 950 | \path[shape=coordinate] (\baposter@box@name nw) ++(\boxwidth,-\boxheight) coordinate(\baposter@box@name se);% 951 | }}}}}% 952 | % 953 | % 954 | % Set coordinates relative to nw,se% 955 | \debug{Fixing Coordinates}% 956 | \path[shape=coordinate]% 957 | (\baposter@box@name nw) +(0pt,-\baposter@box@@boxheaderheight) coordinate(\baposter@box@name tnw)% 958 | (\baposter@box@name nw |- \baposter@box@name se) coordinate(\baposter@box@name sw)% 959 | (\baposter@box@name se |- \baposter@box@name nw) coordinate(\baposter@box@name ne)% 960 | (\baposter@box@name ne) +(0pt,-\baposter@box@@boxheaderheight) coordinate(\baposter@box@name tne)% 961 | % 962 | (\baposter@box@name nw) +(-0.025em,0pt) coordinate(\baposter@box@name outer nw)% 963 | (\baposter@box@name tnw) +(-0.025em,0pt) coordinate(\baposter@box@name outer tnw)% 964 | (\baposter@box@name sw) +(-0.025em,0pt) coordinate(\baposter@box@name outer sw)% 965 | % 966 | (\baposter@box@name ne) +( 0.025em,0pt) coordinate(\baposter@box@name outer ne)% 967 | (\baposter@box@name tne) +( 0.025em,0pt) coordinate(\baposter@box@name outer tne)% 968 | (\baposter@box@name se) +( 0.025em,0pt) coordinate(\baposter@box@name outer se);% 969 | % 970 | %% Setting the bg colors of the box header 971 | \baposterHeaderSetShade{headerColorOne}{headerColorTwo}{borderColor} 972 | % 973 | \tikzstyle{rc}=[rounded corners=\baposter@box@@cornerradius];% 974 | \tikzstyle{src}=[rounded corners=0.5em];% 975 | % 976 | 977 | %% Now that everything is set up, draw the actual box, with bg and header 978 | \begin{scope}[line width=\baposter@box@linewidth] 979 | %% Header% 980 | \debug{Header}% 981 | \debug{Header-Shape: \baposter@box@headershape, header-border: \baposter@box@headerborder (\baposter@box@headerbordernr)}% 982 | % TODO: Also turn this last ifcase construct into a handler function 983 | % We only need to determine (fill|shade)(draw|)... 984 | % \baposterHeaderDrawBackground{bgColorOne}{bgColorTwo}{borderColor} 985 | % \baposterHeaderDrawBorder{borderColor} 986 | \ifcase\baposter@box@headerbordernr\relax% 987 | % open 988 | \ifthenelse{\equal{\baposter@box@headershade}{plain}}{ 989 | \filldraw [style=header colors] \baposterHeaderGetShape;% 990 | }{ 991 | \shadedraw [style=header colors] \baposterHeaderGetShape;% 992 | } 993 | \or 994 | % closed 995 | \ifthenelse{\equal{\baposter@box@headershade}{plain}}{ 996 | \filldraw [style=header colors] \baposterHeaderGetShape -- cycle;% 997 | }{ 998 | \shadedraw [style=header colors] \baposterHeaderGetShape -- cycle;% 999 | } 1000 | \or 1001 | % none 1002 | \ifthenelse{\equal{\baposter@box@headershade}{plain}}{ 1003 | \fill [style=header colors] \baposterHeaderGetShape;% 1004 | }{ 1005 | \shade [style=header colors] \baposterHeaderGetShape;% 1006 | } 1007 | \fi 1008 | % 1009 | %% Draw the text inside the box header: 1010 | \baposterHeaderDrawText{\color{headerFontColor}\baposter@box@headerfont{\baposter@box@title}};% 1011 | % 1012 | %% Text borders (border around boxes) 1013 | \debug{Poster boxes}% 1014 | % First set box shade 1015 | \baposterBoxDrawBackground{boxColorOne}{boxColorTwo} 1016 | \baposterBoxDrawBorder{borderColor} 1017 | %% 1018 | %% Text Box% 1019 | \debug{Drawing Text}% 1020 | \path (\baposter@box@name tnw) node(text) [anchor=north west, 1021 | outer sep=-0.000em,text width=\boxwidth-2\baposter@box@@boxpadding,inner sep=\baposter@box@@boxpadding, 1022 | text justified] {\usebox{\baposter@box@content}};% 1023 | \end{scope} 1024 | % 1025 | % Finally store the box name as the previous box for the next call 1026 | % \xdef\@@previousbox{\baposter@box@name}% 1027 | }% END of posterbox definition 1028 | % 1029 | %% Poster Background% 1030 | \baposterPosterDrawBackground{bgColorOne}{bgColorTwo}% 1031 | %% Poster header/title 1032 | \hspace{-1.5em}% 1033 | \begin{tikzpicture}[inner sep=0pt,outer sep=0pt,line width=0.05em]% 1034 | \useasboundingbox (0em,0em) rectangle(\textwidth,\textheight);% 1035 | \path[shape=coordinate]% 1036 | (0pt,\colheight) coordinate(north west) (\textwidth,\colheight) coordinate(north east)% 1037 | (0pt,0pt) coordinate(south west) (\textwidth,0pt) coordinate(south east);% 1038 | % 1039 | \ifbaposter@eyecatcher% Has eye catcher 1040 | \debug{Eyecatcher found!} 1041 | \setbox\baposter@titleimage@left=\hbox{#2}% 1042 | \else% Has no eye catcher% 1043 | \setbox\baposter@titleimage@left=\hbox{}% 1044 | \fi% 1045 | \setlength{\baposter@titleimage@left@width}{\wd\baposter@titleimage@left}% 1046 | \setbox\baposter@titleimage@right=\hbox{#5}% 1047 | \setlength{\baposter@titleimage@right@width}{\wd\baposter@titleimage@right}% 1048 | \setlength{\baposter@titleimage@textwidth}{\textwidth}% 1049 | \addtolength{\baposter@titleimage@textwidth}{-\baposter@titleimage@left@width}% 1050 | \addtolength{\baposter@titleimage@textwidth}{-\baposter@titleimage@right@width}% 1051 | 1052 | \debug{#3} 1053 | % 1054 | % 1055 | % % Draw Header% 1056 | \draw (north west) +(0em,1em+0.5\headerheight) node(image)[anchor=west] { {\usebox{\baposter@titleimage@left }} };% 1057 | \draw (north east) +(0em,1em+0.5\headerheight) node(logo) [anchor=east] { {\usebox{\baposter@titleimage@right}} };% 1058 | % 1059 | \ifbaposter@eyecatcher% Has eye catcher% 1060 | \draw (image.east) node(title)[anchor=west,text width=\baposter@titleimage@textwidth]{% 1061 | \begin{minipage}{\baposter@titleimage@textwidth}% 1062 | \begin{center}% 1063 | \textbf{\Huge #3}\\% 1064 | {\Large #4}% 1065 | \end{center}% 1066 | \end{minipage} 1067 | };% 1068 | \else% Has no eye catcher 1069 | \draw (image.east) node(title)[anchor=west] { {\begin{minipage}{\baposter@titleimage@textwidth}{\bfseries\Huge #3}\\{\Large #4}\end{minipage}} };% 1070 | \fi 1071 | }% END poster begin 1072 | % The body 1073 | {% BEGIN poster end 1074 | % The end, draw gridlines if neccesary 1075 | \ifbaposter@grid 1076 | \newdimen{\gridpos} 1077 | \pgfmathsetmacro{\z}{\baposter@columns-1} 1078 | \foreach \y in {0,...,\z} 1079 | { 1080 | \setlength{\gridpos}{\y\colwidth+\y\baposter@@colspacing} 1081 | \draw[draw=green,draw opacity=0.7] (\gridpos,0pt) -- (\gridpos,\colheight) 1082 | (\gridpos+\colwidth,0pt) -- (\gridpos+\colwidth,\colheight);% 1083 | } 1084 | % Horizontal lines, every 0.1: 1085 | %% Explicitly list all percentages, because with {0.0, 0.1, ..., 1.0} we 1086 | %% get rounding errors in the displayed numbers! 1087 | \foreach \y in {0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0} 1088 | \draw[draw=green,draw opacity=0.7] (0pt,\colheight-\y\colheight) -- 1089 | (\textwidth,\colheight-\y\colheight) node[anchor=west] {\y};% 1090 | \fi% 1091 | \end{tikzpicture}% 1092 | % \xkvview{} 1093 | \par 1094 | }% END poster end 1095 | -------------------------------------------------------------------------------- /poster/dd.smt2: -------------------------------------------------------------------------------- 1 | (set-logic HORN) 2 | (declare-fun Inv (Int) Bool) 3 | ;; fact 4 | (assert (forall ((x Int)) (=> (= x 0) (Inv x)))) 5 | ;; chc 6 | (assert (forall ((x Int) (y Int)) 7 | (=> (and (Inv x) (<= x 10) (= y (+ x 1))) (Inv y)))) 8 | ;; query 9 | (assert (forall ((x Int)) (=> (and (Inv x) (> x 15)) false))) 10 | (check-sat) 11 | (get-model) 12 | -------------------------------------------------------------------------------- /poster/images/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/poster/images/.DS_Store -------------------------------------------------------------------------------- /poster/images/bsi_res.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/poster/images/bsi_res.pdf -------------------------------------------------------------------------------- /poster/images/chart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/poster/images/chart.png -------------------------------------------------------------------------------- /poster/images/code-hunter.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/poster/images/code-hunter.pdf -------------------------------------------------------------------------------- /poster/images/example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/poster/images/example.png -------------------------------------------------------------------------------- /poster/images/hunter.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/poster/images/hunter.pdf -------------------------------------------------------------------------------- /poster/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/poster/images/logo.png -------------------------------------------------------------------------------- /poster/images/logo1.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/poster/images/logo1.jpeg -------------------------------------------------------------------------------- /poster/images/logo2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/poster/images/logo2.png -------------------------------------------------------------------------------- /poster/images/pintu.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/poster/images/pintu.jpg -------------------------------------------------------------------------------- /poster/images/pliny.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/poster/images/pliny.png -------------------------------------------------------------------------------- /poster/images/taiji.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/poster/images/taiji.png -------------------------------------------------------------------------------- /poster/images/ut.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/poster/images/ut.png -------------------------------------------------------------------------------- /poster/images/viz-overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/poster/images/viz-overview.png -------------------------------------------------------------------------------- /poster/lijuan.aux: -------------------------------------------------------------------------------- 1 | \relax 2 | \bibstyle{ieee} 3 | \bibcite{amberg11:graphtrack}{1} 4 | \bibcite{awf:tracking}{2} 5 | \pgfsyspdfmark {pgfid1}{1780200}{797160} 6 | -------------------------------------------------------------------------------- /poster/lijuan.log: -------------------------------------------------------------------------------- 1 | This is pdfTeX, Version 3.14159265-2.6-1.40.20 (TeX Live 2019) (preloaded format=pdflatex 2019.5.8) 5 DEC 2020 22:29 2 | entering extended mode 3 | restricted \write18 enabled. 4 | %&-line parsing enabled. 5 | **lijuan.tex 6 | (./lijuan.tex 7 | LaTeX2e <2018-12-01> 8 | (./baposter.cls 9 | Document Class: baposter 2011/11/26 v2.0 baposter class 10 | (/usr/local/texlive/2019/texmf-dist/tex/latex/base/article.cls 11 | Document Class: article 2018/09/03 v1.4i Standard LaTeX document class 12 | (/usr/local/texlive/2019/texmf-dist/tex/latex/base/size10.clo 13 | File: size10.clo 2018/09/03 v1.4i Standard LaTeX file (size option) 14 | ) 15 | \c@part=\count80 16 | \c@section=\count81 17 | \c@subsection=\count82 18 | \c@subsubsection=\count83 19 | \c@paragraph=\count84 20 | \c@subparagraph=\count85 21 | \c@figure=\count86 22 | \c@table=\count87 23 | \abovecaptionskip=\skip41 24 | \belowcaptionskip=\skip42 25 | \bibindent=\dimen102 26 | ) 27 | baposter: Brian Amberg, 2007, 2008, 2009, 2010, 2011 | http://www.brian-amberg. 28 | de/uni/poster/ 29 | baposter: Reinhold Kainhofer, 2011 | http://reinhold.kainhofer.com/ 30 | \baposter@basepaperwidth=\skip43 31 | \baposter@basepaperheight=\skip44 32 | \baposter@basemargin=\skip45 33 | \baposter@finalpaperwidth=\skip46 34 | \baposter@finalpaperheight=\skip47 35 | \baposter@finalmargin=\skip48 36 | \headerheight=\skip49 37 | \colwidth=\skip50 38 | \colheight=\skip51 39 | \baposter@@colspacing=\skip52 40 | \baposter@box@@cornerradius=\skip53 41 | \baposter@box@@boxheaderheight=\skip54 42 | \baposter@box@@boxpadding=\skip55 43 | \boxstartx=\skip56 44 | \boxstarty=\skip57 45 | \boxwidth=\skip58 46 | \boxheight=\skip59 47 | \baposter@titleimage@left@width=\skip60 48 | \baposter@titleimage@right@width=\skip61 49 | \baposter@titleimage@textwidth=\skip62 50 | \baposter@box@content=\box27 51 | \baposter@titleimage@left=\box28 52 | \baposter@titleimage@title=\box29 53 | \baposter@titleimage@right=\box30 54 | Use Packages 55 | (/usr/local/texlive/2019/texmf-dist/tex/latex/xkeyval/xkeyval.sty 56 | Package: xkeyval 2014/12/03 v2.7a package option processing (HA) 57 | 58 | (/usr/local/texlive/2019/texmf-dist/tex/generic/xkeyval/xkeyval.tex 59 | (/usr/local/texlive/2019/texmf-dist/tex/generic/xkeyval/xkvutils.tex 60 | \XKV@toks=\toks14 61 | \XKV@tempa@toks=\toks15 62 | 63 | (/usr/local/texlive/2019/texmf-dist/tex/generic/xkeyval/keyval.tex)) 64 | \XKV@depth=\count88 65 | File: xkeyval.tex 2014/12/03 v2.7a key=value parser (HA) 66 | )) 67 | (/usr/local/texlive/2019/texmf-dist/tex/latex/tools/calc.sty 68 | Package: calc 2017/05/25 v4.3 Infix arithmetic (KKT,FJ) 69 | \calc@Acount=\count89 70 | \calc@Bcount=\count90 71 | \calc@Adimen=\dimen103 72 | \calc@Bdimen=\dimen104 73 | \calc@Askip=\skip63 74 | \calc@Bskip=\skip64 75 | LaTeX Info: Redefining \setlength on input line 80. 76 | LaTeX Info: Redefining \addtolength on input line 81. 77 | \calc@Ccount=\count91 78 | \calc@Cskip=\skip65 79 | ) 80 | (/usr/local/texlive/2019/texmf-dist/tex/latex/xcolor/xcolor.sty 81 | Package: xcolor 2016/05/11 v2.12 LaTeX color extensions (UK) 82 | 83 | (/usr/local/texlive/2019/texmf-dist/tex/latex/graphics-cfg/color.cfg 84 | File: color.cfg 2016/01/02 v1.6 sample color configuration 85 | ) 86 | Package xcolor Info: Driver file: pdftex.def on input line 225. 87 | 88 | (/usr/local/texlive/2019/texmf-dist/tex/latex/graphics-def/pdftex.def 89 | File: pdftex.def 2018/01/08 v1.0l Graphics/color driver for pdftex 90 | ) 91 | Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1348. 92 | Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1352. 93 | Package xcolor Info: Model `RGB' extended on input line 1364. 94 | Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1366. 95 | Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1367. 96 | Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1368. 97 | Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1369. 98 | Package xcolor Info: Model `Gray' substituted by `gray' on input line 1370. 99 | Package xcolor Info: Model `wave' substituted by `hsb' on input line 1371. 100 | ) 101 | (/usr/local/texlive/2019/texmf-dist/tex/latex/pgf/frontendlayer/tikz.sty 102 | (/usr/local/texlive/2019/texmf-dist/tex/latex/pgf/basiclayer/pgf.sty 103 | (/usr/local/texlive/2019/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty 104 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/utilities/pgfutil-common.te 105 | x 106 | \pgfutil@everybye=\toks16 107 | \pgfutil@tempdima=\dimen105 108 | \pgfutil@tempdimb=\dimen106 109 | 110 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/utilities/pgfutil-common-li 111 | sts.tex)) 112 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/utilities/pgfutil-latex.def 113 | \pgfutil@abb=\box31 114 | (/usr/local/texlive/2019/texmf-dist/tex/latex/ms/everyshi.sty 115 | Package: everyshi 2001/05/15 v3.00 EveryShipout Package (MS) 116 | )) 117 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex 118 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/pgf.revision.tex) 119 | Package: pgfrcs 2019/04/04 v3.1.2 (3.1.2) 120 | )) 121 | Package: pgf 2019/04/04 v3.1.2 (3.1.2) 122 | 123 | (/usr/local/texlive/2019/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty 124 | (/usr/local/texlive/2019/texmf-dist/tex/latex/graphics/graphicx.sty 125 | Package: graphicx 2017/06/01 v1.1a Enhanced LaTeX Graphics (DPC,SPQR) 126 | 127 | (/usr/local/texlive/2019/texmf-dist/tex/latex/graphics/graphics.sty 128 | Package: graphics 2017/06/25 v1.2c Standard LaTeX Graphics (DPC,SPQR) 129 | 130 | (/usr/local/texlive/2019/texmf-dist/tex/latex/graphics/trig.sty 131 | Package: trig 2016/01/03 v1.10 sin cos tan (DPC) 132 | ) 133 | (/usr/local/texlive/2019/texmf-dist/tex/latex/graphics-cfg/graphics.cfg 134 | File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration 135 | ) 136 | Package graphics Info: Driver file: pdftex.def on input line 99. 137 | ) 138 | \Gin@req@height=\dimen107 139 | \Gin@req@width=\dimen108 140 | ) 141 | (/usr/local/texlive/2019/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty 142 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex 143 | Package: pgfsys 2019/04/04 v3.1.2 (3.1.2) 144 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex 145 | \pgfkeys@pathtoks=\toks17 146 | \pgfkeys@temptoks=\toks18 147 | 148 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/utilities/pgfkeysfiltered.c 149 | ode.tex 150 | \pgfkeys@tmptoks=\toks19 151 | )) 152 | \pgf@x=\dimen109 153 | \pgf@y=\dimen110 154 | \pgf@xa=\dimen111 155 | \pgf@ya=\dimen112 156 | \pgf@xb=\dimen113 157 | \pgf@yb=\dimen114 158 | \pgf@xc=\dimen115 159 | \pgf@yc=\dimen116 160 | \w@pgf@writea=\write3 161 | \r@pgf@reada=\read1 162 | \c@pgf@counta=\count92 163 | \c@pgf@countb=\count93 164 | \c@pgf@countc=\count94 165 | \c@pgf@countd=\count95 166 | \t@pgf@toka=\toks20 167 | \t@pgf@tokb=\toks21 168 | \t@pgf@tokc=\toks22 169 | \pgf@sys@id@count=\count96 170 | 171 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/systemlayer/pgf.cfg 172 | File: pgf.cfg 2019/04/04 v3.1.2 (3.1.2) 173 | ) 174 | Driver file for pgf: pgfsys-pdftex.def 175 | 176 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-pdftex.d 177 | ef 178 | File: pgfsys-pdftex.def 2019/04/04 v3.1.2 (3.1.2) 179 | 180 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-common-p 181 | df.def 182 | File: pgfsys-common-pdf.def 2019/04/04 v3.1.2 (3.1.2) 183 | ))) 184 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoftpath. 185 | code.tex 186 | File: pgfsyssoftpath.code.tex 2019/04/04 v3.1.2 (3.1.2) 187 | \pgfsyssoftpath@smallbuffer@items=\count97 188 | \pgfsyssoftpath@bigbuffer@items=\count98 189 | ) 190 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprotocol. 191 | code.tex 192 | File: pgfsysprotocol.code.tex 2019/04/04 v3.1.2 (3.1.2) 193 | )) 194 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/basiclayer/pgfcore.code.tex 195 | Package: pgfcore 2019/04/04 v3.1.2 (3.1.2) 196 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex 197 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/math/pgfmathcalc.code.tex 198 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/math/pgfmathutil.code.tex) 199 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/math/pgfmathparser.code.tex 200 | \pgfmath@dimen=\dimen117 201 | \pgfmath@count=\count99 202 | \pgfmath@box=\box32 203 | \pgfmath@toks=\toks23 204 | \pgfmath@stack@operand=\toks24 205 | \pgfmath@stack@operation=\toks25 206 | ) 207 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.code. 208 | tex 209 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.basic 210 | .code.tex) 211 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.trigo 212 | nometric.code.tex) 213 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.rando 214 | m.code.tex) 215 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.compa 216 | rison.code.tex) 217 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.base. 218 | code.tex) 219 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.round 220 | .code.tex) 221 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.misc. 222 | code.tex) 223 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.integ 224 | erarithmetics.code.tex))) 225 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/math/pgfmathfloat.code.tex 226 | \c@pgfmathroundto@lastzeros=\count100 227 | )) 228 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepoints.co 229 | de.tex 230 | File: pgfcorepoints.code.tex 2019/04/04 v3.1.2 (3.1.2) 231 | \pgf@picminx=\dimen118 232 | \pgf@picmaxx=\dimen119 233 | \pgf@picminy=\dimen120 234 | \pgf@picmaxy=\dimen121 235 | \pgf@pathminx=\dimen122 236 | \pgf@pathmaxx=\dimen123 237 | \pgf@pathminy=\dimen124 238 | \pgf@pathmaxy=\dimen125 239 | \pgf@xx=\dimen126 240 | \pgf@xy=\dimen127 241 | \pgf@yx=\dimen128 242 | \pgf@yy=\dimen129 243 | \pgf@zx=\dimen130 244 | \pgf@zy=\dimen131 245 | ) 246 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathconst 247 | ruct.code.tex 248 | File: pgfcorepathconstruct.code.tex 2019/04/04 v3.1.2 (3.1.2) 249 | \pgf@path@lastx=\dimen132 250 | \pgf@path@lasty=\dimen133 251 | ) 252 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathusage 253 | .code.tex 254 | File: pgfcorepathusage.code.tex 2019/04/04 v3.1.2 (3.1.2) 255 | \pgf@shorten@end@additional=\dimen134 256 | \pgf@shorten@start@additional=\dimen135 257 | ) 258 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/basiclayer/pgfcorescopes.co 259 | de.tex 260 | File: pgfcorescopes.code.tex 2019/04/04 v3.1.2 (3.1.2) 261 | \pgfpic=\box33 262 | \pgf@hbox=\box34 263 | \pgf@layerbox@main=\box35 264 | \pgf@picture@serial@count=\count101 265 | ) 266 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/basiclayer/pgfcoregraphicst 267 | ate.code.tex 268 | File: pgfcoregraphicstate.code.tex 2019/04/04 v3.1.2 (3.1.2) 269 | \pgflinewidth=\dimen136 270 | ) 271 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransform 272 | ations.code.tex 273 | File: pgfcoretransformations.code.tex 2019/04/04 v3.1.2 (3.1.2) 274 | \pgf@pt@x=\dimen137 275 | \pgf@pt@y=\dimen138 276 | \pgf@pt@temp=\dimen139 277 | ) 278 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/basiclayer/pgfcorequick.cod 279 | e.tex 280 | File: pgfcorequick.code.tex 2019/04/04 v3.1.2 (3.1.2) 281 | ) 282 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreobjects.c 283 | ode.tex 284 | File: pgfcoreobjects.code.tex 2019/04/04 v3.1.2 (3.1.2) 285 | ) 286 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathproce 287 | ssing.code.tex 288 | File: pgfcorepathprocessing.code.tex 2019/04/04 v3.1.2 (3.1.2) 289 | ) 290 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/basiclayer/pgfcorearrows.co 291 | de.tex 292 | File: pgfcorearrows.code.tex 2019/04/04 v3.1.2 (3.1.2) 293 | \pgfarrowsep=\dimen140 294 | ) 295 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreshade.cod 296 | e.tex 297 | File: pgfcoreshade.code.tex 2019/04/04 v3.1.2 (3.1.2) 298 | \pgf@max=\dimen141 299 | \pgf@sys@shading@range@num=\count102 300 | \pgf@shadingcount=\count103 301 | ) 302 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreimage.cod 303 | e.tex 304 | File: pgfcoreimage.code.tex 2019/04/04 v3.1.2 (3.1.2) 305 | 306 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreexternal. 307 | code.tex 308 | File: pgfcoreexternal.code.tex 2019/04/04 v3.1.2 (3.1.2) 309 | \pgfexternal@startupbox=\box36 310 | )) 311 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/basiclayer/pgfcorelayers.co 312 | de.tex 313 | File: pgfcorelayers.code.tex 2019/04/04 v3.1.2 (3.1.2) 314 | ) 315 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretranspare 316 | ncy.code.tex 317 | File: pgfcoretransparency.code.tex 2019/04/04 v3.1.2 (3.1.2) 318 | ) 319 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepatterns. 320 | code.tex 321 | File: pgfcorepatterns.code.tex 2019/04/04 v3.1.2 (3.1.2) 322 | ) 323 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/basiclayer/pgfcorerdf.code. 324 | tex 325 | File: pgfcorerdf.code.tex 2019/04/04 v3.1.2 (3.1.2) 326 | ))) 327 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/modules/pgfmoduleshapes.cod 328 | e.tex 329 | File: pgfmoduleshapes.code.tex 2019/04/04 v3.1.2 (3.1.2) 330 | \pgfnodeparttextbox=\box37 331 | ) 332 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/modules/pgfmoduleplot.code. 333 | tex 334 | File: pgfmoduleplot.code.tex 2019/04/04 v3.1.2 (3.1.2) 335 | ) 336 | (/usr/local/texlive/2019/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version 337 | -0-65.sty 338 | Package: pgfcomp-version-0-65 2019/04/04 v3.1.2 (3.1.2) 339 | \pgf@nodesepstart=\dimen142 340 | \pgf@nodesepend=\dimen143 341 | ) 342 | (/usr/local/texlive/2019/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version 343 | -1-18.sty 344 | Package: pgfcomp-version-1-18 2019/04/04 v3.1.2 (3.1.2) 345 | )) 346 | (/usr/local/texlive/2019/texmf-dist/tex/latex/pgf/utilities/pgffor.sty 347 | (/usr/local/texlive/2019/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty 348 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex) 349 | ) (/usr/local/texlive/2019/texmf-dist/tex/latex/pgf/math/pgfmath.sty 350 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex)) 351 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/utilities/pgffor.code.tex 352 | Package: pgffor 2019/04/04 v3.1.2 (3.1.2) 353 | 354 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex) 355 | \pgffor@iter=\dimen144 356 | \pgffor@skip=\dimen145 357 | \pgffor@stack=\toks26 358 | \pgffor@toks=\toks27 359 | )) 360 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/frontendlayer/tikz/tikz.cod 361 | e.tex 362 | Package: tikz 2019/04/04 v3.1.2 (3.1.2) 363 | 364 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/libraries/pgflibraryplothan 365 | dlers.code.tex 366 | File: pgflibraryplothandlers.code.tex 2019/04/04 v3.1.2 (3.1.2) 367 | \pgf@plot@mark@count=\count104 368 | \pgfplotmarksize=\dimen146 369 | ) 370 | \tikz@lastx=\dimen147 371 | \tikz@lasty=\dimen148 372 | \tikz@lastxsaved=\dimen149 373 | \tikz@lastysaved=\dimen150 374 | \tikzleveldistance=\dimen151 375 | \tikzsiblingdistance=\dimen152 376 | \tikz@figbox=\box38 377 | \tikz@figbox@bg=\box39 378 | \tikz@tempbox=\box40 379 | \tikz@tempbox@bg=\box41 380 | \tikztreelevel=\count105 381 | \tikznumberofchildren=\count106 382 | \tikznumberofcurrentchild=\count107 383 | \tikz@fig@count=\count108 384 | 385 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/modules/pgfmodulematrix.cod 386 | e.tex 387 | File: pgfmodulematrix.code.tex 2019/04/04 v3.1.2 (3.1.2) 388 | \pgfmatrixcurrentrow=\count109 389 | \pgfmatrixcurrentcolumn=\count110 390 | \pgf@matrix@numberofcolumns=\count111 391 | ) 392 | \tikz@expandcount=\count112 393 | 394 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/frontendlayer/tikz/librarie 395 | s/tikzlibrarytopaths.code.tex 396 | File: tikzlibrarytopaths.code.tex 2019/04/04 v3.1.2 (3.1.2) 397 | ))) 398 | (/usr/local/texlive/2019/texmf-dist/tex/latex/base/ifthen.sty 399 | Package: ifthen 2014/09/29 v1.1c Standard LaTeX ifthen package (DPC) 400 | ) 401 | (/usr/local/texlive/2019/texmf-dist/tex/latex/base/fontenc.sty 402 | Package: fontenc 2018/08/11 v2.0j Standard LaTeX package 403 | 404 | (/usr/local/texlive/2019/texmf-dist/tex/latex/base/t1enc.def 405 | File: t1enc.def 2018/08/11 v2.0j Standard LaTeX file 406 | LaTeX Font Info: Redeclaring font encoding T1 on input line 48. 407 | )) 408 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/frontendlayer/tikz/librarie 409 | s/tikzlibrarydecorations.code.tex 410 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/modules/pgfmoduledecoration 411 | s.code.tex 412 | \pgfdecoratedcompleteddistance=\dimen153 413 | \pgfdecoratedremainingdistance=\dimen154 414 | \pgfdecoratedinputsegmentcompleteddistance=\dimen155 415 | \pgfdecoratedinputsegmentremainingdistance=\dimen156 416 | \pgf@decorate@distancetomove=\dimen157 417 | \pgf@decorate@repeatstate=\count113 418 | \pgfdecorationsegmentamplitude=\dimen158 419 | \pgfdecorationsegmentlength=\dimen159 420 | ) 421 | \tikz@lib@dec@box=\box42 422 | ) 423 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/frontendlayer/tikz/librarie 424 | s/tikzlibraryfadings.code.tex 425 | File: tikzlibraryfadings.code.tex 2019/04/04 v3.1.2 (3.1.2) 426 | 427 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/libraries/pgflibraryfadings 428 | .code.tex 429 | File: pgflibraryfadings.code.tex 2019/04/04 v3.1.2 (3.1.2) 430 | )) 431 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/frontendlayer/tikz/librarie 432 | s/tikzlibrarysnakes.code.tex 433 | File: tikzlibrarysnakes.code.tex 2019/04/04 v3.1.2 (3.1.2) 434 | 435 | 436 | Package pgf Warning: Snakes have been superseded by decorations. Please use the 437 | decoration libraries instead of the snakes library on input line 14. 438 | 439 | 440 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/frontendlayer/tikz/librarie 441 | s/tikzlibrarydecorations.pathmorphing.code.tex 442 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/libraries/decorations/pgfli 443 | brarydecorations.pathmorphing.code.tex)) 444 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/frontendlayer/tikz/librarie 445 | s/tikzlibrarydecorations.pathreplacing.code.tex 446 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/libraries/decorations/pgfli 447 | brarydecorations.pathreplacing.code.tex)) 448 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/frontendlayer/tikz/librarie 449 | s/tikzlibrarydecorations.shapes.code.tex 450 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/libraries/decorations/pgfli 451 | brarydecorations.shapes.code.tex))) 452 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/frontendlayer/tikz/librarie 453 | s/tikzlibrarycalc.code.tex 454 | File: tikzlibrarycalc.code.tex 2019/04/04 v3.1.2 (3.1.2) 455 | ) 456 | \baposter@movebody=\skip66 457 | \baposter@basemarginright=\skip67 458 | \baposter@basemarginleft=\skip68 459 | 460 | Paperwidth=2392.87677pt 461 | Paperheight=3383.03267pt 462 | BasePaperwidth=681.97864pt 463 | BasePaperheight=964.1767pt 464 | (/usr/local/texlive/2019/texmf-dist/tex/latex/geometry/geometry.sty 465 | Package: geometry 2018/04/16 v5.8 Page Geometry 466 | 467 | (/usr/local/texlive/2019/texmf-dist/tex/generic/oberdiek/ifpdf.sty 468 | Package: ifpdf 2018/09/07 v3.3 Provides the ifpdf switch 469 | ) 470 | (/usr/local/texlive/2019/texmf-dist/tex/generic/oberdiek/ifvtex.sty 471 | Package: ifvtex 2016/05/16 v1.6 Detect VTeX and its facilities (HO) 472 | Package ifvtex Info: VTeX not detected. 473 | ) 474 | (/usr/local/texlive/2019/texmf-dist/tex/generic/ifxetex/ifxetex.sty 475 | Package: ifxetex 2010/09/12 v0.6 Provides ifxetex conditional 476 | ) 477 | \Gm@cnth=\count114 478 | \Gm@cntv=\count115 479 | \c@Gm@tempcnt=\count116 480 | \Gm@bindingoffset=\dimen160 481 | \Gm@wd@mp=\dimen161 482 | \Gm@odd@mp=\dimen162 483 | \Gm@even@mp=\dimen163 484 | \Gm@layoutwidth=\dimen164 485 | \Gm@layoutheight=\dimen165 486 | \Gm@layouthoffset=\dimen166 487 | \Gm@layoutvoffset=\dimen167 488 | \Gm@dimlist=\toks28 489 | ) 490 | (/usr/local/texlive/2019/texmf-dist/tex/latex/pgf/utilities/pgfpages.sty 491 | Package: pgfpages 2011/01/05 ver 0.02 492 | \pgf@logicalpages=\count117 493 | \pgf@firstshipout=\count118 494 | \pgf@lastshipout=\count119 495 | \pgf@currentshipout=\count120 496 | \pgf@cpn=\count121 497 | \pgf@shipoutnextto=\count122 498 | \pgfphysicalheight=\dimen168 499 | \pgfphysicalwidth=\dimen169 500 | \pgfpages@shipoutbox=\box43 501 | ) 502 | \pgfpages@box@1=\box44 503 | ) 504 | (/usr/local/texlive/2019/texmf-dist/tex/latex/amsmath/amsmath.sty 505 | Package: amsmath 2018/12/01 v2.17b AMS math features 506 | \@mathmargin=\skip69 507 | 508 | For additional information on amsmath, use the `?' option. 509 | (/usr/local/texlive/2019/texmf-dist/tex/latex/amsmath/amstext.sty 510 | Package: amstext 2000/06/29 v2.01 AMS text 511 | 512 | (/usr/local/texlive/2019/texmf-dist/tex/latex/amsmath/amsgen.sty 513 | File: amsgen.sty 1999/11/30 v2.0 generic functions 514 | \@emptytoks=\toks29 515 | \ex@=\dimen170 516 | )) 517 | (/usr/local/texlive/2019/texmf-dist/tex/latex/amsmath/amsbsy.sty 518 | Package: amsbsy 1999/11/29 v1.2d Bold Symbols 519 | \pmbraise@=\dimen171 520 | ) 521 | (/usr/local/texlive/2019/texmf-dist/tex/latex/amsmath/amsopn.sty 522 | Package: amsopn 2016/03/08 v2.02 operator names 523 | ) 524 | \inf@bad=\count123 525 | LaTeX Info: Redefining \frac on input line 223. 526 | \uproot@=\count124 527 | \leftroot@=\count125 528 | LaTeX Info: Redefining \overline on input line 385. 529 | \classnum@=\count126 530 | \DOTSCASE@=\count127 531 | LaTeX Info: Redefining \ldots on input line 482. 532 | LaTeX Info: Redefining \dots on input line 485. 533 | LaTeX Info: Redefining \cdots on input line 606. 534 | \Mathstrutbox@=\box45 535 | \strutbox@=\box46 536 | \big@size=\dimen172 537 | LaTeX Font Info: Redeclaring font encoding OML on input line 729. 538 | LaTeX Font Info: Redeclaring font encoding OMS on input line 730. 539 | \macc@depth=\count128 540 | \c@MaxMatrixCols=\count129 541 | \dotsspace@=\muskip10 542 | \c@parentequation=\count130 543 | \dspbrk@lvl=\count131 544 | \tag@help=\toks30 545 | \row@=\count132 546 | \column@=\count133 547 | \maxfields@=\count134 548 | \andhelp@=\toks31 549 | \eqnshift@=\dimen173 550 | \alignsep@=\dimen174 551 | \tagshift@=\dimen175 552 | \tagwidth@=\dimen176 553 | \totwidth@=\dimen177 554 | \lineht@=\dimen178 555 | \@envbody=\toks32 556 | \multlinegap=\skip70 557 | \multlinetaggap=\skip71 558 | \mathdisplay@stack=\toks33 559 | LaTeX Info: Redefining \[ on input line 2844. 560 | LaTeX Info: Redefining \] on input line 2845. 561 | ) 562 | (/usr/local/texlive/2019/texmf-dist/tex/latex/amsfonts/amssymb.sty 563 | Package: amssymb 2013/01/14 v3.01 AMS font symbols 564 | 565 | (/usr/local/texlive/2019/texmf-dist/tex/latex/amsfonts/amsfonts.sty 566 | Package: amsfonts 2013/01/14 v3.01 Basic AMSFonts support 567 | \symAMSa=\mathgroup4 568 | \symAMSb=\mathgroup5 569 | LaTeX Font Info: Overwriting math alphabet `\mathfrak' in version `bold' 570 | (Font) U/euf/m/n --> U/euf/b/n on input line 106. 571 | )) 572 | (/usr/local/texlive/2019/texmf-dist/tex/latex/relsize/relsize.sty 573 | Package: relsize 2013/03/29 ver 4.1 574 | ) 575 | (/usr/local/texlive/2019/texmf-dist/tex/latex/multirow/multirow.sty 576 | Package: multirow 2019/01/01 v2.4 Span multiple rows of a table 577 | \multirow@colwidth=\skip72 578 | \multirow@cntb=\count135 579 | \multirow@dima=\skip73 580 | \bigstrutjot=\dimen179 581 | ) 582 | (/usr/local/texlive/2019/texmf-dist/tex/latex/graphics/rotating.sty 583 | Package: rotating 2016/08/11 v2.16d rotated objects in LaTeX 584 | \c@r@tfl@t=\count136 585 | \rotFPtop=\skip74 586 | \rotFPbot=\skip75 587 | \rot@float@box=\box47 588 | \rot@mess@toks=\toks34 589 | ) 590 | (/usr/local/texlive/2019/texmf-dist/tex/latex/tools/bm.sty 591 | Package: bm 2017/01/16 v1.2c Bold Symbol Support (DPC/FMi) 592 | \symboldoperators=\mathgroup6 593 | \symboldletters=\mathgroup7 594 | \symboldsymbols=\mathgroup8 595 | LaTeX Font Info: Redeclaring math alphabet \mathbf on input line 141. 596 | LaTeX Info: Redefining \bm on input line 207. 597 | ) 598 | (/usr/local/texlive/2019/texmf-dist/tex/latex/url/url.sty 599 | \Urlmuskip=\muskip11 600 | Package: url 2013/09/16 ver 3.4 Verb mode for urls, etc. 601 | ) 602 | (/usr/local/texlive/2019/texmf-dist/tex/latex/tools/multicol.sty 603 | Package: multicol 2018/12/27 v1.8v multicolumn formatting (FMi) 604 | \c@tracingmulticols=\count137 605 | \mult@box=\box48 606 | \multicol@leftmargin=\dimen180 607 | \c@unbalance=\count138 608 | \c@collectmore=\count139 609 | \doublecol@number=\count140 610 | \multicoltolerance=\count141 611 | \multicolpretolerance=\count142 612 | \full@width=\dimen181 613 | \page@free=\dimen182 614 | \premulticols=\dimen183 615 | \postmulticols=\dimen184 616 | \multicolsep=\skip76 617 | \multicolbaselineskip=\skip77 618 | \partial@page=\box49 619 | \last@line=\box50 620 | \maxbalancingoverflow=\dimen185 621 | \mult@rightbox=\box51 622 | \mult@grightbox=\box52 623 | \mult@gfirstbox=\box53 624 | \mult@firstbox=\box54 625 | \@tempa=\box55 626 | \@tempa=\box56 627 | \@tempa=\box57 628 | \@tempa=\box58 629 | \@tempa=\box59 630 | \@tempa=\box60 631 | \@tempa=\box61 632 | \@tempa=\box62 633 | \@tempa=\box63 634 | \@tempa=\box64 635 | \@tempa=\box65 636 | \@tempa=\box66 637 | \@tempa=\box67 638 | \@tempa=\box68 639 | \@tempa=\box69 640 | \@tempa=\box70 641 | \@tempa=\box71 642 | \c@columnbadness=\count143 643 | \c@finalcolumnbadness=\count144 644 | \last@try=\dimen186 645 | \multicolovershoot=\dimen187 646 | \multicolundershoot=\dimen188 647 | \mult@nat@firstbox=\box72 648 | \colbreak@box=\box73 649 | \mc@col@check@num=\count145 650 | ) 651 | (/usr/local/texlive/2019/texmf-dist/tex/latex/psnfss/palatino.sty 652 | Package: palatino 2005/04/12 PSNFSS-v9.2a (SPQR) 653 | ) 654 | 655 | LaTeX Warning: Unused global option(s): 656 | [final]. 657 | 658 | (./lijuan.aux) 659 | \openout1 = `lijuan.aux'. 660 | 661 | LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 65. 662 | LaTeX Font Info: ... okay on input line 65. 663 | LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 65. 664 | LaTeX Font Info: ... okay on input line 65. 665 | LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 65. 666 | LaTeX Font Info: ... okay on input line 65. 667 | LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 65. 668 | LaTeX Font Info: ... okay on input line 65. 669 | LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 65. 670 | LaTeX Font Info: ... okay on input line 65. 671 | LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 65. 672 | LaTeX Font Info: ... okay on input line 65. 673 | LaTeX Font Info: Try loading font information for T1+ppl on input line 65. 674 | (/usr/local/texlive/2019/texmf-dist/tex/latex/psnfss/t1ppl.fd 675 | File: t1ppl.fd 2001/06/04 font definitions for T1/ppl. 676 | ) 677 | (/usr/local/texlive/2019/texmf-dist/tex/context/base/mkii/supp-pdf.mkii 678 | [Loading MPS to PDF converter (version 2006.09.02).] 679 | \scratchcounter=\count146 680 | \scratchdimen=\dimen189 681 | \scratchbox=\box74 682 | \nofMPsegments=\count147 683 | \nofMParguments=\count148 684 | \everyMPshowfont=\toks35 685 | \MPscratchCnt=\count149 686 | \MPscratchDim=\dimen190 687 | \MPnumerator=\count150 688 | \makeMPintoPDFobject=\count151 689 | \everyMPtoPDFconversion=\toks36 690 | ) (/usr/local/texlive/2019/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty 691 | Package: epstopdf-base 2016/05/15 v2.6 Base part for package epstopdf 692 | 693 | (/usr/local/texlive/2019/texmf-dist/tex/generic/oberdiek/infwarerr.sty 694 | Package: infwarerr 2016/05/16 v1.4 Providing info/warning/error messages (HO) 695 | ) 696 | (/usr/local/texlive/2019/texmf-dist/tex/latex/oberdiek/grfext.sty 697 | Package: grfext 2016/05/16 v1.2 Manage graphics extensions (HO) 698 | 699 | (/usr/local/texlive/2019/texmf-dist/tex/generic/oberdiek/kvdefinekeys.sty 700 | Package: kvdefinekeys 2016/05/16 v1.4 Define keys (HO) 701 | 702 | (/usr/local/texlive/2019/texmf-dist/tex/generic/oberdiek/ltxcmds.sty 703 | Package: ltxcmds 2016/05/16 v1.23 LaTeX kernel commands for general use (HO) 704 | ))) 705 | (/usr/local/texlive/2019/texmf-dist/tex/latex/oberdiek/kvoptions.sty 706 | Package: kvoptions 2016/05/16 v3.12 Key value format for package options (HO) 707 | 708 | (/usr/local/texlive/2019/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty 709 | Package: kvsetkeys 2016/05/16 v1.17 Key value parser (HO) 710 | 711 | (/usr/local/texlive/2019/texmf-dist/tex/generic/oberdiek/etexcmds.sty 712 | Package: etexcmds 2016/05/16 v1.6 Avoid name clashes with e-TeX commands (HO) 713 | 714 | (/usr/local/texlive/2019/texmf-dist/tex/generic/oberdiek/ifluatex.sty 715 | Package: ifluatex 2016/05/16 v1.4 Provides the ifluatex switch (HO) 716 | Package ifluatex Info: LuaTeX not detected. 717 | )))) 718 | (/usr/local/texlive/2019/texmf-dist/tex/generic/oberdiek/pdftexcmds.sty 719 | Package: pdftexcmds 2018/09/10 v0.29 Utility functions of pdfTeX for LuaTeX (HO 720 | ) 721 | Package pdftexcmds Info: LuaTeX not detected. 722 | Package pdftexcmds Info: \pdf@primitive is available. 723 | Package pdftexcmds Info: \pdf@ifprimitive is available. 724 | Package pdftexcmds Info: \pdfdraftmode found. 725 | ) 726 | Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4 727 | 38. 728 | Package grfext Info: Graphics extension search list: 729 | (grfext) [.pdf,.png,.jpg,.mps,.jpeg,.jbig2,.jb2,.PDF,.PNG,.JPG,.JPE 730 | G,.JBIG2,.JB2,.eps] 731 | (grfext) \AppendGraphicsExtensions on input line 456. 732 | 733 | (/usr/local/texlive/2019/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg 734 | File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv 735 | e 736 | )) 737 | ABD: EveryShipout initializing macros 738 | *geometry* driver: auto-detecting 739 | *geometry* detected driver: pdftex 740 | *geometry* verbose mode - [ preamble ] result: 741 | * driver: pdftex 742 | * paper: custom 743 | * layout: 744 | * layoutoffset:(h,v)=(0.0pt,0.0pt) 745 | * modes: landscape 746 | * h-part:(L,W,R)=(12.1637pt, 939.8493pt, 12.1637pt) 747 | * v-part:(T,H,B)=(12.1637pt, 657.65125pt, 12.1637pt) 748 | * \paperwidth=964.1767pt 749 | * \paperheight=681.97864pt 750 | * \textwidth=939.8493pt 751 | * \textheight=657.65125pt 752 | * \oddsidemargin=-60.1063pt 753 | * \evensidemargin=-60.1063pt 754 | * \topmargin=-97.1063pt 755 | * \headheight=12.0pt 756 | * \headsep=25.0pt 757 | * \topskip=10.0pt 758 | * \footskip=30.0pt 759 | * \marginparwidth=65.0pt 760 | * \marginparsep=11.0pt 761 | * \columnsep=14.99634pt 762 | * \skip\footins=9.0pt plus 4.0pt minus 2.0pt 763 | * \hoffset=0.0pt 764 | * \voffset=0.0pt 765 | * \mag=1000 766 | * \@twocolumnfalse 767 | * \@twosidefalse 768 | * \@mparswitchfalse 769 | * \@reversemarginfalse 770 | * (1in=72.27pt=25.4mm, 1cm=28.453pt) 771 | 772 | \FSZ=\skip78 773 | 774 | File: images/logo1.jpeg Graphic file (type jpg) 775 | 776 | Package pdftex.def Info: images/logo1.jpeg used on input line 147. 777 | (pdftex.def) Requested size: 64.71132pt x 65.0pt. 778 | 779 | File: images/logo2.png Graphic file (type png) 780 | 781 | Package pdftex.def Info: images/logo2.png used on input line 147. 782 | (pdftex.def) Requested size: 120.54628pt x 65.0pt. 783 | LaTeX Font Info: Font shape `T1/ppl/bx/n' in size <10> not available 784 | (Font) Font shape `T1/ppl/b/n' tried instead on input line 147. 785 | LaTeX Font Info: Font shape `T1/ppl/bx/n' in size <24.88> not available 786 | (Font) Font shape `T1/ppl/b/n' tried instead on input line 147. 787 | LaTeX Font Info: Font shape `T1/ppl/bx/sc' in size <24.88> not available 788 | (Font) Font shape `T1/ppl/b/sc' tried instead on input line 147. 789 | LaTeX Font Info: Try loading font information for U+msa on input line 147. 790 | (/usr/local/texlive/2019/texmf-dist/tex/latex/amsfonts/umsa.fd 791 | File: umsa.fd 2013/01/14 v3.01 AMS symbols A 792 | ) 793 | LaTeX Font Info: Try loading font information for U+msb on input line 147. 794 | 795 | (/usr/local/texlive/2019/texmf-dist/tex/latex/amsfonts/umsb.fd 796 | File: umsb.fd 2013/01/14 v3.01 AMS symbols B 797 | ) 798 | 799 | File: images/logo.png Graphic file (type png) 800 | 801 | Package pdftex.def Info: images/logo.png used on input line 178. 802 | (pdftex.def) Requested size: 75.28105pt x 75.28105pt. 803 | LaTeX Font Info: Font shape `T1/ppl/bx/it' in size <10> not available 804 | (Font) Font shape `T1/ppl/b/it' tried instead on input line 178. 805 | Missing character: There is no ; in font nullfont! 806 | Missing character: There is no ; in font nullfont! 807 | LaTeX Font Info: Font shape `T1/ppl/bx/n' in size <14.4> not available 808 | (Font) Font shape `T1/ppl/b/n' tried instead on input line 178. 809 | LaTeX Font Info: Font shape `T1/ppl/bx/sc' in size <14.4> not available 810 | (Font) Font shape `T1/ppl/b/sc' tried instead on input line 178. 811 | Missing character: There is no ; in font nullfont! 812 | LaTeX Font Info: Try loading font information for OMS+ppl on input line 190. 813 | 814 | 815 | (/usr/local/texlive/2019/texmf-dist/tex/latex/psnfss/omsppl.fd 816 | File: omsppl.fd 817 | ) 818 | LaTeX Font Info: Font shape `OMS/ppl/m/n' in size <10> not available 819 | (Font) Font shape `OMS/cmsy/m/n' tried instead on input line 190. 820 | Missing character: There is no ; in font nullfont! 821 | Missing character: There is no ; in font nullfont! 822 | Missing character: There is no ; in font nullfont! 823 | 824 | File: images/viz-overview.png Graphic file (type png) 825 | 826 | Package pdftex.def Info: images/viz-overview.png used on input line 197. 827 | (pdftex.def) Requested size: 440.00298pt x 220.00359pt. 828 | 829 | Underfull \hbox (badness 10000) in paragraph at lines 197--197 830 | 831 | [] 832 | 833 | Missing character: There is no ; in font nullfont! 834 | Missing character: There is no ; in font nullfont! 835 | Missing character: There is no ; in font nullfont! 836 | Missing character: There is no ; in font nullfont! 837 | Missing character: There is no ; in font nullfont! 838 | Missing character: There is no ; in font nullfont! 839 | 840 | Underfull \hbox (badness 5726) in paragraph at lines 229--229 841 | []\T1/ppl/m/n/10 We plan to con- 842 | [] 843 | 844 | 845 | Underfull \hbox (badness 10000) in paragraph at lines 229--229 846 | \T1/ppl/m/n/10 cur-rently our tech- 847 | [] 848 | 849 | 850 | Underfull \hbox (badness 6608) in paragraph at lines 229--229 851 | \T1/ppl/m/n/10 niques only sup-port 852 | [] 853 | 854 | Missing character: There is no ; in font nullfont! 855 | Missing character: There is no ; in font nullfont! 856 | Missing character: There is no ; in font nullfont! 857 | Missing character: There is no ; in font nullfont! 858 | Missing character: There is no ; in font nullfont! 859 | Missing character: There is no ; in font nullfont! 860 | 861 | File: images/bsi_res.pdf Graphic file (type pdf) 862 | 863 | Package pdftex.def Info: images/bsi_res.pdf used on input line 247. 864 | (pdftex.def) Requested size: 440.00949pt x 220.00911pt. 865 | Missing character: There is no ; in font nullfont! 866 | Missing character: There is no ; in font nullfont! 867 | Missing character: There is no ; in font nullfont! 868 | 869 | File: images/pintu.jpg Graphic file (type jpg) 870 | 871 | Package pdftex.def Info: images/pintu.jpg used on input line 269. 872 | (pdftex.def) Requested size: 97.85738pt x 73.38855pt. 873 | 874 | Underfull \hbox (badness 2689) in paragraph at lines 269--269 875 | []\T1/ppl/m/n/10 Use type-directed con-straints to en-code 876 | [] 877 | 878 | Missing character: There is no ; in font nullfont! 879 | Missing character: There is no ; in font nullfont! 880 | Missing character: There is no ; in font nullfont! 881 | [2 882 | 883 | {/usr/local/texlive/2019/texmf-var/fonts/map/pdftex/updmap/pdftex.map} <./image 884 | s/logo1.jpeg> <./images/logo2.png> <./images/logo.png> <./images/viz-overview.p 885 | ng> <./images/bsi_res.pdf> <./images/pintu.jpg>] (./lijuan.aux) ) 886 | Here is how much of TeX's memory you used: 887 | 16225 strings out of 492616 888 | 331520 string characters out of 6129482 889 | 404356 words of memory out of 5000000 890 | 19769 multiletter control sequences out of 15000+600000 891 | 30929 words of font info for 57 fonts, out of 8000000 for 9000 892 | 1143 hyphenation exceptions out of 8191 893 | 62i,10n,76p,408b,1045s stack positions out of 5000i,500n,10000p,200000b,80000s 894 | {/usr/local/te 895 | xlive/2019/texmf-dist/fonts/enc/dvips/base/8r.enc} 907 | Output written on lijuan.pdf (1 page, 1011409 bytes). 908 | PDF statistics: 909 | 135 PDF objects out of 1000 (max. 8388607) 910 | 72 compressed objects within 1 object stream 911 | 0 named destinations out of 1000 (max. 500000) 912 | 187 words of extra memory for PDF output out of 10000 (max. 10000000) 913 | 914 | -------------------------------------------------------------------------------- /poster/lijuan.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/poster/lijuan.pdf -------------------------------------------------------------------------------- /poster/lijuan.tex: -------------------------------------------------------------------------------- 1 | \documentclass[landscape,final,a0paper,fontscale=0.285]{baposter} 2 | 3 | \usepackage{calc} 4 | \usepackage{graphicx} 5 | \usepackage{amsmath} 6 | \usepackage{amssymb} 7 | \usepackage{relsize} 8 | \usepackage{multirow} 9 | \usepackage{rotating} 10 | \usepackage{bm} 11 | \usepackage{url} 12 | 13 | \usepackage{graphicx} 14 | \usepackage{multicol} 15 | 16 | %\usepackage{times} 17 | %\usepackage{helvet} 18 | %\usepackage{bookman} 19 | \usepackage{palatino} 20 | 21 | \newcommand{\captionfont}{\footnotesize} 22 | 23 | \graphicspath{{images/}{../images/}} 24 | \usetikzlibrary{calc} 25 | 26 | \newcommand{\SET}[1] {\ensuremath{\mathcal{#1}}} 27 | \newcommand{\MAT}[1] {\ensuremath{\boldsymbol{#1}}} 28 | \newcommand{\VEC}[1] {\ensuremath{\boldsymbol{#1}}} 29 | \newcommand{\Video}{\SET{V}} 30 | \newcommand{\video}{\VEC{f}} 31 | \newcommand{\track}{x} 32 | \newcommand{\Track}{\SET T} 33 | \newcommand{\LMs}{\SET L} 34 | \newcommand{\lm}{l} 35 | \newcommand{\PosE}{\SET P} 36 | \newcommand{\posE}{\VEC p} 37 | \newcommand{\negE}{\VEC n} 38 | \newcommand{\NegE}{\SET N} 39 | \newcommand{\Occluded}{\SET O} 40 | \newcommand{\occluded}{o} 41 | \newcommand{\toolname}{\textsc{Visualizer} } 42 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 43 | %%%% Some math symbols used in the text 44 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 45 | 46 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 47 | % Multicol Settings 48 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 49 | \setlength{\columnsep}{1.5em} 50 | \setlength{\columnseprule}{0mm} 51 | 52 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 53 | % Save space in lists. Use this after the opening of the list 54 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 55 | \newcommand{\compresslist}{% 56 | \setlength{\itemsep}{1pt}% 57 | \setlength{\parskip}{0pt}% 58 | \setlength{\parsep}{0pt}% 59 | } 60 | 61 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 62 | %%% Begin of Document 63 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 64 | 65 | \begin{document} 66 | 67 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 68 | %%% Here starts the poster 69 | %%%--------------------------------------------------------------------------- 70 | %%% Format it to your taste with the options 71 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 72 | % Define some colors 73 | 74 | %\definecolor{lightblue}{cmyk}{0.83,0.24,0,0.12} 75 | \definecolor{lightblue}{rgb}{0.145,0.6666,1} 76 | 77 | % Draw a video 78 | \newlength{\FSZ} 79 | \newcommand{\drawvideo}[3]{% [0 0.25 0.5 0.75 1 1.25 1.5] 80 | \noindent\pgfmathsetlength{\FSZ}{\linewidth/#2} 81 | \begin{tikzpicture}[outer sep=0pt,inner sep=0pt,x=\FSZ,y=\FSZ] 82 | \draw[color=lightblue!50!black] (0,0) node[outer sep=0pt,inner sep=0pt,text width=\linewidth,minimum height=0] (video) {\noindent#3}; 83 | \path [fill=lightblue!50!black,line width=0pt] 84 | (video.north west) rectangle ([yshift=\FSZ] video.north east) 85 | \foreach \x in {1,2,...,#2} { 86 | {[rounded corners=0.6] ($(video.north west)+(-0.7,0.8)+(\x,0)$) rectangle +(0.4,-0.6)} 87 | } 88 | ; 89 | \path [fill=lightblue!50!black,line width=0pt] 90 | ([yshift=-1\FSZ] video.south west) rectangle (video.south east) 91 | \foreach \x in {1,2,...,#2} { 92 | {[rounded corners=0.6] ($(video.south west)+(-0.7,-0.2)+(\x,0)$) rectangle +(0.4,-0.6)} 93 | } 94 | ; 95 | \foreach \x in {1,...,#1} { 96 | \draw[color=lightblue!50!black] ([xshift=\x\linewidth/#1] video.north west) -- ([xshift=\x\linewidth/#1] video.south west); 97 | } 98 | \foreach \x in {0,#1} { 99 | \draw[color=lightblue!50!black] ([xshift=\x\linewidth/#1,yshift=1\FSZ] video.north west) -- ([xshift=\x\linewidth/#1,yshift=-1\FSZ] video.south west); 100 | } 101 | \end{tikzpicture} 102 | } 103 | 104 | \hyphenation{resolution occlusions} 105 | %% 106 | \begin{poster}% 107 | % Poster Options 108 | { 109 | % Show grid to help with alignment 110 | grid=false, 111 | % Column spacing 112 | colspacing=1em, 113 | % Color style 114 | bgColorOne=white, 115 | bgColorTwo=white, 116 | borderColor=lightblue, 117 | headerColorOne=black, 118 | headerColorTwo=lightblue, 119 | headerFontColor=white, 120 | boxColorOne=white, 121 | boxColorTwo=lightblue, 122 | % Format of textbox 123 | textborder=roundedleft, 124 | % Format of text header 125 | eyecatcher=true, 126 | headerborder=closed, 127 | headerheight=0.1\textheight, 128 | % textfont=\sc, An example of changing the text font 129 | headershape=roundedright, 130 | headershade=shadelr, 131 | headerfont=\Large\bf\textsc, %Sans Serif 132 | textfont={\setlength{\parindent}{1.5em}}, 133 | boxshade=plain, 134 | % background=shade-tb, 135 | background=plain, 136 | linewidth=2pt 137 | } 138 | % Eye Catcher 139 | {\includegraphics[height=6.5em]{images/logo1.jpeg}} 140 | % Title 141 | {\bf\textsc{Visualization Synthesis from Natural Language}\vspace{0.1em}} 142 | % Authors 143 | {\textsc{\{ Lijuan Cheng \}@UC Santa Barbara}} 144 | % University logo 145 | {% The makebox allows the title to flow into the logo, this is a hack because of the L shaped logo. 146 | \includegraphics[height=6.5em]{images/logo2.png} 147 | } 148 | 149 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 150 | %%% Now define the boxes that make up the poster 151 | %%%--------------------------------------------------------------------------- 152 | %%% Each box has a name and can be placed absolutely or relatively. 153 | %%% The only inconvenience is that you can only specify a relative position 154 | %%% towards an already declared box. So if you have a box attached to the 155 | %%% bottom, one to the top and a third one which should be in between, you 156 | %%% have to specify the top and bottom boxes before you specify the middle 157 | %%% box. 158 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 159 | % 160 | % A coloured circle useful as a bullet with an adjustably strong filling 161 | \newcommand{\colouredcircle}{% 162 | \tikz{\useasboundingbox (-0.2em,-0.32em) rectangle(0.2em,0.32em); \draw[draw=black,fill=lightblue,line width=0.03em] (0,0) circle(0.18em);}} 163 | 164 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 165 | \headerbox{Objective and Goals}{name=problem,column=0,row=0}{ 166 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 167 | \noindent{\centering\includegraphics[scale=0.5]{images/logo.png}\\} 168 | \vspace{1em} 169 | \toolname is a system for synthesizing visualization from natural language. 170 | Unlike previous systems for automating data visualization, our approach is: 171 | 172 | \begin{enumerate} 173 | \item {\bf \emph{Data-driven:}} Rather than using a fixed set of translation rules, 174 | \toolname leverages a \emph{sequence-to-sequence model} that turns natural language into executable code. 175 | \item {\bf \emph{Constraint-based:}} \toolname uses an off-the-shelf \emph{MAX-SMT solver} to generate the most likely candidates that 1) are consistent with the English description, 2) design guidelines suggested by visualization best-practice, and 3) type-constraints enforced by every input figures. \ldots 176 | \end{enumerate} 177 | \vspace{0.3em} 178 | } 179 | 180 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 181 | \headerbox{Challenges}{name=contribution,column=1,row=0}{ 182 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 183 | \begin{itemize}\compresslist 184 | \item {\bf \emph{Natural language:}} Real-world natural language descriptions are both noisy and ambiguous 185 | \item {\bf \emph{Weak specification:}} Unlike previous program synthesis problems that leverage formal specifications or input-output examples to ensure the correctness of the desired solutions, natural language spec is weaker 186 | \item {\bf \emph{Complexity:}} Non-trivial data visualizations typically require a sequence of transformations, which makes it difficult for \emph{pure machine learning} to generate the exact solutions 187 | \end{itemize} 188 | 189 | \vspace{0.3em} 190 | } 191 | 192 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 193 | \headerbox{Overview of our approach}{name=results,column=2,span=2,row=0}{ 194 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 195 | 196 | \includegraphics[height=22em,width=44em]{images/viz-overview.png} 197 | } 198 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 199 | \headerbox{References}{name=references,column=1,above=bottom}{ 200 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 201 | \smaller 202 | \bibliographystyle{ieee} 203 | \renewcommand{\section}[2]{\vskip 0.05em} 204 | \begin{thebibliography}{1}\itemsep=-0.01em 205 | \setlength{\baselineskip}{0.4em} 206 | \bibitem{amberg11:graphtrack} 207 | Yutong Shao and Ndapa Nakashole. 208 | \newblock 209 | CHARTDIALOGS: Plotting from Natural Language Instructions 210 | \newblock In {\em ACL,2020} 211 | \bibitem{awf:tracking} 212 | Chenglong Wang, Yu Feng, Ras Bodik, Alvin Cheung, Isil Dillig. 213 | \newblock 214 | Visualization by Example. 215 | \newblock In {\em POPL 2020} 216 | \end{thebibliography} 217 | \vspace{0.3em} 218 | } 219 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 220 | \headerbox{Future Work}{name=future,column=0,below=problem}{ 221 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 222 | \begin{multicols}{2} 223 | We plan to continue our current work and integrate it into RStudio IDE to reduce the workload 224 | of daily program task; We also plan to train a model for large corpus of visualizations to generate more \emph{natural} visualizations. 225 | Finally, currently our techniques only support Matplotlib in Python and we plan to extend our framework to support other languages like R and Java. 226 | 227 | \end{multicols} 228 | \vspace{0.3em} 229 | } 230 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 231 | \headerbox{Acknowledgments}{name=ack,column=0,above=bottom,below=future}{ 232 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 233 | We thank Yanju Chen in the PLSE lab for his unconditional support and guidance. 234 | \vspace{0.3em} 235 | } 236 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 237 | \headerbox{NEURAL ARCHITECTURE}{name=speed,column=2,span=2,row=0,below=results}{ 238 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 239 | \includegraphics[height=22em,width=44em]{images/bsi_res.pdf} 240 | Given a \emph{question-solution} pair $(D, S)$, where a \emph{question} is a user description composed by word tokens $d$: 241 | $D=(d_1, d_2, \ldots, d_n)$, 242 | and a \emph{solution} is a symbolic program composed by a sequence of functions 243 | $s_i$: 244 | $S=(s_1, s_2, \ldots, s_m),$ 245 | the \emph{seq2seq} model is used to estimate the probability of $P(S|D)$, which is then given by: 246 | $P(S|D)=P(s_1, s_2, \ldots, s_m|d_1, d_2, \ldots, d_n)=\prod_{t=1}^{m}P(s_t|v, s_1, s_2, \ldots, s_{t-1})$. 247 | } 248 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 249 | % \headerbox{Challenges}{name=method,column=0,below=problem,bottomaligned=speed}{ 250 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 251 | % \begin{itemize}\compresslist 252 | % \item {\bf \emph{Context abstraction:}} Identify a good abstraction of program context to drive database queries for discovering relevant components 253 | % \item {\bf \emph{Interface alignment:}} Once we identify relevant component, figure out correspondence between this component's interface and existing context elements 254 | % \item {\bf \emph{Adaptor code synthesis:}} We need to synthesize adaptor code to integrate component into program context 255 | % \end{itemize} 256 | % \vspace{0.3em} 257 | % } 258 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 259 | \headerbox{Our Solution}{name=solution,column=1,below=contribution,above=references}{ 260 | \noindent{\centering\includegraphics[width=0.45\linewidth]{images/pintu.jpg}\\} 261 | We combine the advantages of statistical and SMT-based techniques: 262 | \begin{enumerate}\itemsep=0.1cm 263 | \item Use LSTM to turn a natural language description into a set of candidate programs 264 | \item Use type-directed constraints to encode \emph{valid transformations} 265 | \item Use visualization design guidelines to encode \emph{recommended transformations} 266 | \item Formulate data visualization synthesis as a \emph{MAX-SMT} problem (i.e., find maximum cost matching that satisfies a set of integrity constraints) 267 | \end{enumerate} 268 | 269 | } 270 | 271 | \end{poster} 272 | 273 | \end{document} 274 | -------------------------------------------------------------------------------- /poster/muse.tex: -------------------------------------------------------------------------------- 1 | \documentclass[landscape,final,a0paper,fontscale=0.285]{baposter} 2 | 3 | \usepackage{calc} 4 | \usepackage{graphicx} 5 | \usepackage{amsmath} 6 | \usepackage{amssymb} 7 | \usepackage{relsize} 8 | \usepackage{multirow} 9 | \usepackage{rotating} 10 | \usepackage{bm} 11 | \usepackage{url} 12 | 13 | \usepackage{graphicx} 14 | \usepackage{multicol} 15 | 16 | %\usepackage{times} 17 | %\usepackage{helvet} 18 | %\usepackage{bookman} 19 | \usepackage{palatino} 20 | 21 | \newcommand{\captionfont}{\footnotesize} 22 | 23 | \graphicspath{{images/}{../images/}} 24 | \usetikzlibrary{calc} 25 | 26 | \newcommand{\SET}[1] {\ensuremath{\mathcal{#1}}} 27 | \newcommand{\MAT}[1] {\ensuremath{\boldsymbol{#1}}} 28 | \newcommand{\VEC}[1] {\ensuremath{\boldsymbol{#1}}} 29 | \newcommand{\Video}{\SET{V}} 30 | \newcommand{\video}{\VEC{f}} 31 | \newcommand{\track}{x} 32 | \newcommand{\Track}{\SET T} 33 | \newcommand{\LMs}{\SET L} 34 | \newcommand{\lm}{l} 35 | \newcommand{\PosE}{\SET P} 36 | \newcommand{\posE}{\VEC p} 37 | \newcommand{\negE}{\VEC n} 38 | \newcommand{\NegE}{\SET N} 39 | \newcommand{\Occluded}{\SET O} 40 | \newcommand{\occluded}{o} 41 | 42 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 43 | %%%% Some math symbols used in the text 44 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 45 | 46 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 47 | % Multicol Settings 48 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 49 | \setlength{\columnsep}{1.5em} 50 | \setlength{\columnseprule}{0mm} 51 | 52 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 53 | % Save space in lists. Use this after the opening of the list 54 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 55 | \newcommand{\compresslist}{% 56 | \setlength{\itemsep}{1pt}% 57 | \setlength{\parskip}{0pt}% 58 | \setlength{\parsep}{0pt}% 59 | } 60 | 61 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 62 | %%% Begin of Document 63 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 64 | 65 | \begin{document} 66 | 67 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 68 | %%% Here starts the poster 69 | %%%--------------------------------------------------------------------------- 70 | %%% Format it to your taste with the options 71 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 72 | % Define some colors 73 | 74 | %\definecolor{lightblue}{cmyk}{0.83,0.24,0,0.12} 75 | \definecolor{lightblue}{rgb}{0.145,0.6666,1} 76 | 77 | % Draw a video 78 | \newlength{\FSZ} 79 | \newcommand{\drawvideo}[3]{% [0 0.25 0.5 0.75 1 1.25 1.5] 80 | \noindent\pgfmathsetlength{\FSZ}{\linewidth/#2} 81 | \begin{tikzpicture}[outer sep=0pt,inner sep=0pt,x=\FSZ,y=\FSZ] 82 | \draw[color=lightblue!50!black] (0,0) node[outer sep=0pt,inner sep=0pt,text width=\linewidth,minimum height=0] (video) {\noindent#3}; 83 | \path [fill=lightblue!50!black,line width=0pt] 84 | (video.north west) rectangle ([yshift=\FSZ] video.north east) 85 | \foreach \x in {1,2,...,#2} { 86 | {[rounded corners=0.6] ($(video.north west)+(-0.7,0.8)+(\x,0)$) rectangle +(0.4,-0.6)} 87 | } 88 | ; 89 | \path [fill=lightblue!50!black,line width=0pt] 90 | ([yshift=-1\FSZ] video.south west) rectangle (video.south east) 91 | \foreach \x in {1,2,...,#2} { 92 | {[rounded corners=0.6] ($(video.south west)+(-0.7,-0.2)+(\x,0)$) rectangle +(0.4,-0.6)} 93 | } 94 | ; 95 | \foreach \x in {1,...,#1} { 96 | \draw[color=lightblue!50!black] ([xshift=\x\linewidth/#1] video.north west) -- ([xshift=\x\linewidth/#1] video.south west); 97 | } 98 | \foreach \x in {0,#1} { 99 | \draw[color=lightblue!50!black] ([xshift=\x\linewidth/#1,yshift=1\FSZ] video.north west) -- ([xshift=\x\linewidth/#1,yshift=-1\FSZ] video.south west); 100 | } 101 | \end{tikzpicture} 102 | } 103 | 104 | \hyphenation{resolution occlusions} 105 | %% 106 | \begin{poster}% 107 | % Poster Options 108 | { 109 | % Show grid to help with alignment 110 | grid=false, 111 | % Column spacing 112 | colspacing=1em, 113 | % Color style 114 | bgColorOne=white, 115 | bgColorTwo=white, 116 | borderColor=lightblue, 117 | headerColorOne=black, 118 | headerColorTwo=lightblue, 119 | headerFontColor=white, 120 | boxColorOne=white, 121 | boxColorTwo=lightblue, 122 | % Format of textbox 123 | textborder=roundedleft, 124 | % Format of text header 125 | eyecatcher=true, 126 | headerborder=closed, 127 | headerheight=0.1\textheight, 128 | % textfont=\sc, An example of changing the text font 129 | headershape=roundedright, 130 | headershade=shadelr, 131 | headerfont=\Large\bf\textsc, %Sans Serif 132 | textfont={\setlength{\parindent}{1.5em}}, 133 | boxshade=plain, 134 | % background=shade-tb, 135 | background=plain, 136 | linewidth=2pt 137 | } 138 | % Eye Catcher 139 | {\includegraphics[height=6.5em]{images/ut.png}} 140 | % Title 141 | {\bf\textsc{CodeHunter: Context-Driven Component-Based Synthesis from Big Data}\vspace{0.1em}} 142 | % Authors 143 | {\textsc{\{ Yu Feng, Yuepeng Wang, Arati Kaushik, Isil Dillig \}@UT Austin}} 144 | % University logo 145 | {% The makebox allows the title to flow into the logo, this is a hack because of the L shaped logo. 146 | \includegraphics[height=6.5em]{images/pliny.png} 147 | } 148 | 149 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 150 | %%% Now define the boxes that make up the poster 151 | %%%--------------------------------------------------------------------------- 152 | %%% Each box has a name and can be placed absolutely or relatively. 153 | %%% The only inconvenience is that you can only specify a relative position 154 | %%% towards an already declared box. So if you have a box attached to the 155 | %%% bottom, one to the top and a third one which should be in between, you 156 | %%% have to specify the top and bottom boxes before you specify the middle 157 | %%% box. 158 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 159 | % 160 | % A coloured circle useful as a bullet with an adjustably strong filling 161 | \newcommand{\colouredcircle}{% 162 | \tikz{\useasboundingbox (-0.2em,-0.32em) rectangle(0.2em,0.32em); \draw[draw=black,fill=lightblue,line width=0.03em] (0,0) circle(0.18em);}} 163 | 164 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 165 | \headerbox{Objective and Goals}{name=problem,column=0,row=0}{ 166 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 167 | \noindent{\centering\includegraphics[scale=0.2]{images/code-hunter.pdf}\\} 168 | \vspace{1em} 169 | {\sc CodeHunter} is a system for component-based program synthesis in Java. 170 | Unlike previous component-based program synthesis approaches, our approach is: 171 | 172 | \begin{enumerate} 173 | \item {\bf \emph{Data-driven:}} Rather than using a fixed set of components, 174 | {\sc CodeHunter} \emph{dynamically} discovers relevant components in large code corpora. 175 | \item {\bf \emph{Context-driven:}} {\sc CodeHunter} uses \emph{context} of the program to be synthesized to identify pertinent code snippets. We interpret \emph{program context} in a broad way: it includes method signature, comments, test cases, program history \ldots 176 | \end{enumerate} 177 | \vspace{0.3em} 178 | } 179 | 180 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 181 | \headerbox{Challenges}{name=contribution,column=1,row=0}{ 182 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 183 | \begin{itemize}\compresslist 184 | \item {\bf \emph{Context abstraction:}} Identify a good abstraction of program context to drive database queries for discovering relevant components 185 | \item {\bf \emph{Interface alignment:}} Once we identify relevant component, figure out correspondence between this component's interface and existing context elements 186 | \item {\bf \emph{Adaptor code synthesis:}} We need to synthesize adaptor code to integrate component into program context 187 | \end{itemize} 188 | 189 | \vspace{0.3em} 190 | } 191 | 192 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 193 | \headerbox{Overview of our approach}{name=results,column=2,span=2,row=0}{ 194 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 195 | 196 | \includegraphics[height=22em,width=44em]{images/hunter.pdf} 197 | } 198 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 199 | \headerbox{References}{name=references,column=1,above=bottom}{ 200 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 201 | \smaller 202 | \bibliographystyle{ieee} 203 | \renewcommand{\section}[2]{\vskip 0.05em} 204 | \begin{thebibliography}{1}\itemsep=-0.01em 205 | \setlength{\baselineskip}{0.4em} 206 | \bibitem{amberg11:graphtrack} 207 | Perelman, Daniel, et al. 208 | \newblock 209 | Type-directed completion of partial expressions 210 | \newblock In {\em PLDI,2012} 211 | \bibitem{awf:tracking} 212 | Feser, John, Swarat Chaudhuri, and Isil Dillig. 213 | \newblock 214 | Synthesizing Data Structure Transformations from Input-Output Examples. 215 | \newblock In {\em PLDI 2015} 216 | \end{thebibliography} 217 | \vspace{0.3em} 218 | } 219 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 220 | \headerbox{Future Work}{name=future,column=0,below=problem}{ 221 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 222 | \begin{multicols}{2} 223 | We plan to continue our current work and integrate it into Eclipse IDE to reduce the workload 224 | of daily program task; We also plan to generate program specification for large corpus based on comments in natural language. 225 | Finally, currently our techniques only support Java program and we plan to extend our framework to support other languages like C and C++. 226 | 227 | \end{multicols} 228 | \vspace{0.3em} 229 | } 230 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 231 | \headerbox{Acknowledgments}{name=ack,column=0,above=bottom,below=future}{ 232 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 233 | This material is based on research sponsored by the Air Force Research Laboratory, under agreement number FA8750-14-2-0270. 234 | \vspace{0.3em} 235 | } 236 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 237 | \headerbox{Our approach by example}{name=speed,column=2,span=2,row=0,below=results}{ 238 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 239 | \includegraphics[height=28em,width=44em]{images/example.png} 240 | } 241 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 242 | % \headerbox{Challenges}{name=method,column=0,below=problem,bottomaligned=speed}{ 243 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 244 | % \begin{itemize}\compresslist 245 | % \item {\bf \emph{Context abstraction:}} Identify a good abstraction of program context to drive database queries for discovering relevant components 246 | % \item {\bf \emph{Interface alignment:}} Once we identify relevant component, figure out correspondence between this component's interface and existing context elements 247 | % \item {\bf \emph{Adaptor code synthesis:}} We need to synthesize adaptor code to integrate component into program context 248 | % \end{itemize} 249 | % \vspace{0.3em} 250 | % } 251 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 252 | \headerbox{Our Solution}{name=solution,column=1,below=contribution,above=references}{ 253 | \noindent{\centering\includegraphics[width=0.45\linewidth]{images/pintu.jpg}\\} 254 | We combine the advantages of statistical and SMT-based techniques: 255 | \begin{enumerate}\itemsep=0.1cm 256 | \item Use Hidden Markov Models to learn a good abstraction of program context to drive database queries 257 | \item Formulate interface assignment as a \emph{satisfiability modulo the theory of costs} problem (i.e., find maximum cost matching that satisfies a set of integrity constraints) 258 | \item Use type-directed synthesis to generate adaptor code 259 | \end{enumerate} 260 | 261 | } 262 | 263 | \end{poster} 264 | 265 | \end{document} 266 | -------------------------------------------------------------------------------- /report/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/report/.DS_Store -------------------------------------------------------------------------------- /report/Makefile: -------------------------------------------------------------------------------- 1 | # --------------------------------------------------------- 2 | # type "make" command in Unix to create the PDF file 3 | # --------------------------------------------------------- 4 | 5 | PDF_VIEWER?=open -a Preview 6 | 7 | # Main filename 8 | FILE= main 9 | 10 | # --------------------------------------------------------- 11 | 12 | all: 13 | pdflatex ${FILE} 14 | pdflatex ${FILE} 15 | bibtex ${FILE} 16 | bibtex ${FILE} 17 | bibtex ${FILE} 18 | pdflatex ${FILE} 19 | pdflatex ${FILE} 20 | 21 | quick: 22 | pdflatex ${FILE} 23 | 24 | clean: 25 | (rm -rf *.aux *.bbl *.blg *.glg *.glo *.gls *.ilg *.ist *.lof *.log *.lot *.nlo *.nls *.out *.toc *.fdb_latexmk *.bbl) 26 | 27 | veryclean: 28 | make clean 29 | rm -f *~ *.*% 30 | rm -f $(FILE).pdf $(FILE).ps 31 | 32 | mk: 33 | @latexmk -pdf -c-style-errors $(FILE) 34 | allclean: 35 | @latexmk -C -pdf $(FILE) 36 | v: mk 37 | $(PDF_VIEWER) $(FILE).pdf & 38 | -------------------------------------------------------------------------------- /report/abstract.tex: -------------------------------------------------------------------------------- 1 | \begin{abstract} 2 | TBD. 3 | \end{abstract} 4 | -------------------------------------------------------------------------------- /report/algorithm.tex: -------------------------------------------------------------------------------- 1 | \section{Interactive Synthesis Algorithm} 2 | \label{sec:algo} 3 | 4 | TBD. 5 | -------------------------------------------------------------------------------- /report/concl.tex: -------------------------------------------------------------------------------- 1 | \section{Conclusion}~\label{sec:concl} 2 | TBD. -------------------------------------------------------------------------------- /report/eval.tex: -------------------------------------------------------------------------------- 1 | \section{Evaluation}~\label{sec:eval} 2 | TBD. -------------------------------------------------------------------------------- /report/impl.tex: -------------------------------------------------------------------------------- 1 | \section{Implementation}~\label{sec:impl} 2 | TBD. -------------------------------------------------------------------------------- /report/intro.tex: -------------------------------------------------------------------------------- 1 | \section{Introduction} 2 | \label{sec:intro} 3 | 4 | TBD. 5 | -------------------------------------------------------------------------------- /report/macros.tex: -------------------------------------------------------------------------------- 1 | \newcommand{\toolname}{{\sc Faery}\xspace} 2 | \newcommand{\neo}{{\sc Neo} \xspace} 3 | 4 | \newcommand{\semantics}[1]{\llbracket{#1}\rrbracket} 5 | \newcommand{\asemantics}[1]{\llbracket{#1}\rrbracket^{\#}} 6 | \newcommand{\strategy}{\mathcal{S}} 7 | 8 | \newcommand{\oracle}[1]{\llbracket{#1}\rrbracket} 9 | \newcommand{\lang}{\mathcal{L}} 10 | \newcommand{\user}{\mathcal{O}} 11 | \newcommand{\mut}{\mu} 12 | %\newcommand{\example}{\mathcal{Q}} this is defined to be something else 13 | \newcommand{\abs}{\Psi} 14 | \newcommand{\hole}{\square} 15 | 16 | \usepackage{xcolor} 17 | \usepackage{bbm} 18 | 19 | \usepackage{float} 20 | \newfloat{algorithm}{t}{lop} 21 | 22 | \newtheorem{theorem}{Theorem}[section] 23 | \newtheorem{conjecture}[theorem]{Conjecture} 24 | \newtheorem{proposition}[theorem]{Proposition} 25 | \newtheorem{lemma}[theorem]{Lemma} 26 | \newtheorem{corollary}[theorem]{Corollary} 27 | %\newtheorem{example}[theorem]{Example} 28 | \newtheorem{definition}[theorem]{Definition} 29 | \newtheorem{assumption}[theorem]{Assumption} 30 | \newtheorem{sample}[theorem]{Example} 31 | 32 | 33 | 34 | \newcommand{\lattice}{\mathcal{P}} 35 | \newcommand{\element}{P} 36 | \newcommand{\refines}{\sqsubseteq} 37 | \newcommand{\refinedby}{\sqsupseteq} 38 | \newcommand{\aval}{\phi} 39 | \newcommand{\prunes}{\not\models} 40 | \newcommand{\maxprunes}{\not\models^0} 41 | \newcommand{\example}{e} 42 | \newcommand{\examples}{\vec{e}} 43 | -------------------------------------------------------------------------------- /report/main.bib: -------------------------------------------------------------------------------- 1 | @string{tacas = {Proc. Tools and Algorithms for Construction and Analysis of Systems}} 2 | @string{cav = {Proc. International Conference on Computer Aided Verification}} 3 | @string{pldi = {Proc. Conference on Programming Language Design and Implementation}} 4 | @string{popl = {Proc. Symposium on Principles of Programming Languages}} 5 | @string{uist = {Proc. Symposium on User Interface Software and Technology}}} 6 | @string{icse = {Proc. International Conference on Software Engineering}} 7 | @string{chi = {Proc. International Conference on Human Factors in Computing Systems}} 8 | @string{oopsla = {Proc. International Conference on Object-Oriented Programming, Systems, Languages, and Applications}} 9 | @string{asplos = {Proc. International Conference on Architectural Support for Programming Languages and Operating Systems}} 10 | @string{ase = {Proc. International Conference on Automated Software Engineering}} 11 | @string{fmcad = {Proc. Formal Methods in Computer-Aided Design}} 12 | @string{iclr = {Proc. International Conference on Learning Representations}} 13 | @string{neurips = {Proc. Advances in Neural Information Processing Systems}} 14 | 15 | @article{DBLP:journals/corr/abs-1807-03100, 16 | author = {Chenglong Wang and 17 | Po{-}Sen Huang and 18 | Alex Polozov and 19 | Marc Brockschmidt and 20 | Rishabh Singh}, 21 | title = {Execution-Guided Neural Program Decoding}, 22 | journal = {CoRR}, 23 | volume = {abs/1807.03100}, 24 | year = {2018}, 25 | url = {http://arxiv.org/abs/1807.03100}, 26 | archivePrefix = {arXiv}, 27 | eprint = {1807.03100}, 28 | timestamp = {Mon, 13 Aug 2018 16:48:03 +0200}, 29 | biburl = {https://dblp.org/rec/bib/journals/corr/abs-1807-03100}, 30 | bibsource = {dblp computer science bibliography, https://dblp.org} 31 | } 32 | 33 | @inproceedings{dpllt, 34 | author = {Harald Ganzinger and 35 | George Hagen and 36 | Robert Nieuwenhuis and 37 | Albert Oliveras and 38 | Cesare Tinelli}, 39 | title = {{DPLL(} {T):} Fast Decision Procedures}, 40 | booktitle = cav, 41 | pages = {175--188}, 42 | year = {2004}, 43 | publisher = {Springer} 44 | } 45 | 46 | @article{tarjan, 47 | author = {Bengt Aspvall and 48 | Michael F. Plass and 49 | Robert Endre Tarjan}, 50 | title = {A Linear-Time Algorithm for Testing the Truth of Certain Quantified 51 | Boolean Formulas}, 52 | journal = {Inf. Process. Lett.}, 53 | volume = {8}, 54 | number = {3}, 55 | pages = {121--123}, 56 | year = {1979} 57 | } 58 | 59 | @inproceedings{cdcl2, 60 | author = {Lintao Zhang and 61 | Conor F. Madigan and 62 | Matthew W. Moskewicz and 63 | Sharad Malik}, 64 | title = {Efficient Conflict Driven Learning in Boolean Satisfiability Solver}, 65 | booktitle = {Proc. of International Conference on Computer-Aided 66 | Design}, 67 | pages = {279--285}, 68 | year = {2001}, 69 | publisher = {{IEEE} Computer Society} 70 | } 71 | 72 | @article{grasp, 73 | author = {Joao Marques-Silva and 74 | Karem A. Sakallah}, 75 | title = {{GRASP:} {A} Search Algorithm for Propositional Satisfiability}, 76 | journal = {{IEEE} Trans. Computers}, 77 | volume = {48}, 78 | number = {5}, 79 | pages = {506--521}, 80 | year = {1999} 81 | } 82 | 83 | @article{sat4j, 84 | author = {Daniel Le Berre and 85 | Anne Parrain}, 86 | title = {The {S}at4j library, release 2.2}, 87 | journal = {Journal on Satisfiability, Boolean Modeling and Computation}, 88 | pages = {59--6}, 89 | year = {2010}, 90 | timestamp = {Wed, 06 Apr 2011 14:59:27 +0200}, 91 | biburl = {http://dblp.uni-trier.de/rec/bib/journals/jsat/BerreP10}, 92 | bibsource = {dblp computer science bibliography, http://dblp.org} 93 | } 94 | 95 | @inproceedings{z3, 96 | title={{Z3: An efficient SMT solver}}, 97 | author={De Moura, Leonardo and Bj{\o}rner, Nikolaj}, 98 | booktitle=tacas, 99 | pages={337--340}, 100 | year={2008}, 101 | organization={Springer} 102 | } 103 | 104 | @inproceedings{flashfill, 105 | title={Automating string processing in spreadsheets using input-output examples}, 106 | author={Gulwani, Sumit}, 107 | booktitle=popl, 108 | pages={317--330}, 109 | year={2011}, 110 | publisher={ACM} 111 | } 112 | 113 | @inproceedings{sypet, 114 | title={{Component-Based Synthesis for Complex APIs}}, 115 | author={Feng, Yu and Martins, Ruben and Wang, Yuepeng and Dillig, Isil and Reps, Thomas}, 116 | booktitle=popl, 117 | year={2017}, 118 | organization={ACM}, 119 | pages={599--612} 120 | } 121 | 122 | @inproceedings{slang, 123 | title={Code completion with statistical language models}, 124 | author={Raychev, Veselin and Vechev, Martin and Yahav, Eran}, 125 | booktitle=pldi, 126 | pages={419--428}, 127 | year={2014}, 128 | organization={ACM} 129 | } 130 | 131 | @inproceedings{hades, 132 | author = {Navid Yaghmazadeh and 133 | Christian Klinger and 134 | Isil Dillig and 135 | Swarat Chaudhuri}, 136 | title = {Synthesizing transformations on hierarchically structured data}, 137 | booktitle = pldi, 138 | pages = {508--521}, 139 | year = {2016}, 140 | publisher = {ACM} 141 | } 142 | 143 | @inproceedings{sketch2, 144 | author = {Solar-Lezama, Armando and Tancau, Liviu and Bodik, Rastislav and Seshia, Sanjit and Saraswat, Vijay}, 145 | title = {Combinatorial Sketching for Finite Programs}, 146 | booktitle = asplos, 147 | year = {2006}, 148 | pages = {404--415}, 149 | publisher = {ACM} 150 | } 151 | 152 | 153 | 154 | @inproceedings{sketch1, 155 | author = {Armando Solar{-}Lezama and 156 | Rodric M. Rabbah and 157 | Rastislav Bod{\'{\i}}k and 158 | Kemal Ebcioglu}, 159 | title = {Programming by sketching for bit-streaming programs}, 160 | booktitle = pldi, 161 | pages = {281--294}, 162 | year = {2005}, 163 | publisher = {ACM} 164 | } 165 | 166 | 167 | @inproceedings{singh2016, 168 | title={Transforming spreadsheet data types using examples}, 169 | author={Singh, Rishabh and Gulwani, Sumit}, 170 | booktitle=popl, 171 | pages={343--356}, 172 | year={2016}, 173 | organization={ACM} 174 | } 175 | 176 | @inproceedings{prospector, 177 | author = {David Mandelin and 178 | Lin Xu and 179 | Rastislav Bod{\'{\i}}k and 180 | Doug Kimelman}, 181 | title = {Jungloid mining: helping to navigate the {API} jungle}, 182 | booktitle = pldi, 183 | pages = {48--61}, 184 | year = {2005}, 185 | publisher = {ACM} 186 | } 187 | 188 | @inproceedings{insynth, 189 | author = {Tihomir Gvero and 190 | Viktor Kuncak and 191 | Ivan Kuraj and 192 | Ruzica Piskac}, 193 | title = {Complete completion using types and weights}, 194 | booktitle = pldi, 195 | pages = {27--38}, 196 | year = {2013}, 197 | publisher = {ACM} 198 | } 199 | 200 | @inproceedings{morpheus, 201 | title={Component-based synthesis of table consolidation and transformation tasks from examples}, 202 | author={Feng, Yu and Martins, Ruben and Van Geffen, Jacob and Dillig, Isil and Chaudhuri, Swarat}, 203 | booktitle=pldi, 204 | pages={422--436}, 205 | year={2017}, 206 | organization={ACM} 207 | } 208 | 209 | @inproceedings{scythe, 210 | title={Synthesizing highly expressive SQL queries from input-output examples}, 211 | author={Wang, Chenglong and Cheung, Alvin and Bodik, Rastislav}, 212 | booktitle=pldi, 213 | pages={452--466}, 214 | year={2017}, 215 | organization={ACM} 216 | } 217 | 218 | 219 | @inproceedings{lambda2, 220 | author = {Feser, John K. and Chaudhuri, Swarat and Dillig, Isil}, 221 | title = {{Synthesizing Data Structure Transformations from Input-output Examples}}, 222 | booktitle = pldi, 223 | year = {2015}, 224 | pages = {229--239}, 225 | publisher = {ACM}, 226 | } 227 | 228 | 229 | @inproceedings{escher, 230 | author = {Albarghouthi, Aws and Gulwani, Sumit and Kincaid, Zachary}, 231 | title = {{Recursive Program Synthesis}}, 232 | booktitle = cav, 233 | year = {2013}, 234 | pages = {934--950}, 235 | publisher = {Springer} 236 | } 237 | 238 | @article{transit, 239 | title={TRANSIT: specifying protocols with concolic snippets}, 240 | author={Udupa, Abhishek and Raghavan, Arun and Deshmukh, Jyotirmoy V and Mador-Haim, Sela and Martin, Milo MK and Alur, Rajeev}, 241 | journal=pldi, 242 | pages={287--296}, 243 | year={2013}, 244 | publisher={ACM} 245 | } 246 | 247 | @article{synquid, 248 | title={Program synthesis from polymorphic refinement types}, 249 | author={Polikarpova, Nadia and Kuraj, Ivan and Solar-Lezama, Armando}, 250 | journal=pldi, 251 | pages={522--538}, 252 | year={2016}, 253 | publisher={ACM} 254 | } 255 | 256 | @inproceedings{srilm, 257 | title={SRILM-an extensible language modeling toolkit}, 258 | author={Stolcke, Andreas and others}, 259 | booktitle={Interspeech}, 260 | volume={2002}, 261 | year={2002} 262 | } 263 | 264 | @inproceedings{deepcoder, 265 | title={Deepcoder: Learning to write programs}, 266 | author={Balog, Matej and Gaunt, Alexander L and Brockschmidt, Marc and Nowozin, Sebastian and Tarlow, Daniel}, 267 | booktitle=iclr, 268 | publisher={OpenReview}, 269 | year={2017} 270 | } 271 | 272 | @inproceedings{neelakantan2016neural, 273 | title={Neural programmer: Inducing latent programs with gradient descent}, 274 | author={Neelakantan, Arvind and Le, Quoc V and Sutskever, Ilya}, 275 | booktitle=iclr, 276 | publisher={OpenReview}, 277 | year={2016} 278 | } 279 | 280 | @inproceedings{neelakantan2017learning, 281 | title={Learning a natural language interface with neural programmer}, 282 | author={Neelakantan, Arvind and Le, Quoc V and Abadi, Martin and McCallum, Andrew and Amodei, Dario}, 283 | booktitle=iclr, 284 | publisher={OpenReview}, 285 | year={2017} 286 | } 287 | 288 | @inproceedings{sutskever2014sequence, 289 | title={Sequence to sequence learning with neural networks}, 290 | author={Sutskever, Ilya and Vinyals, Oriol and Le, Quoc V}, 291 | booktitle={Advances in Neural Information Processing Systems}, 292 | pages={3104--3112}, 293 | year={2014} 294 | } 295 | 296 | @inproceedings{menon2013machine, 297 | title={A machine learning framework for programming by example}, 298 | author={Menon, Aditya and Tamuz, Omer and Gulwani, Sumit and Lampson, Butler and Kalai, Adam}, 299 | booktitle={Proc. International Conference on Machine Learning}, 300 | pages={187--195}, 301 | year={2013}, 302 | publisher = {Proceedings of Machine Learning Research} 303 | } 304 | 305 | @inproceedings{jungloids, 306 | author = {David Mandelin and 307 | Lin Xu and 308 | Rastislav Bod{\'{\i}}k and 309 | Doug Kimelman}, 310 | title = {Jungloid mining: helping to navigate the {API} jungle}, 311 | booktitle = {Proceedings of the {ACM} {SIGPLAN} 2005 Conference on Programming 312 | Language Design and Implementation, Chicago, IL, USA, June 12-15, 313 | 2005}, 314 | pages = {48--61}, 315 | year = {2005} 316 | } 317 | 318 | @inproceedings{bigL, 319 | author = {Calvin Smith and 320 | Aws Albarghouthi}, 321 | title = {MapReduce program synthesis}, 322 | booktitle = pldi, 323 | pages = {326--340}, 324 | year = {2016}, 325 | publisher = {ACM} 326 | } 327 | 328 | 329 | @inproceedings{Brahma, 330 | author = {Susmit Jha and 331 | Sumit Gulwani and 332 | Sanjit A. Seshia and 333 | Ashish Tiwari}, 334 | title = {Oracle-guided component-based program synthesis}, 335 | booktitle = icse, 336 | pages = {215--224}, 337 | year = {2010}, 338 | publisher = {ACM/IEEE} 339 | } 340 | 341 | 342 | @inproceedings{synudic, 343 | author = {Adri{\`{a}} Gasc{\'{o}}n and 344 | Ashish Tiwari and 345 | Brent Carmer and 346 | Umang Mathur}, 347 | title = {Look for the Proof to Find the Program: Decorated-Component-Based 348 | Program Synthesis}, 349 | booktitle = cav, 350 | pages = {86--103}, 351 | year = {2017}, 352 | publisher = {Springer} 353 | } 354 | 355 | @inproceedings{blaze, 356 | title={Program Synthesis using Abstraction Refinement}, 357 | author={Wang, Xinyu and Dillig, Isil and Singh, Rishabh}, 358 | booktitle=popl, 359 | publisher={ACM}, 360 | year={2018}, 361 | pages={63:1-63:30} 362 | } 363 | 364 | @article{blinkfill, 365 | title={Blinkfill: Semi-supervised programming by example for syntactic string transformations}, 366 | author={Singh, Rishabh}, 367 | journal={Proceedings of the VLDB Endowment}, 368 | volume={9}, 369 | number={10}, 370 | pages={816--827}, 371 | year={2016}, 372 | publisher={VLDB Endowment} 373 | } 374 | 375 | @inproceedings{dace, 376 | title={{Synthesis of Data Completion Scripts using Finite Tree Automata}}, 377 | author={Wang, Xinyu and Dillig, Isil and Singh, Rishabh}, 378 | booktitle=oopsla, 379 | year={2017}, 380 | publisher={ACM}, 381 | pages={62:1-62:26} 382 | } 383 | 384 | @inproceedings{sqlizer, 385 | title={{SQLizer: Query Synthesis from Natural Language}}, 386 | author={Yaghmazadeh, Navid and Wang, Yuepeng and Dillig, Isil and Dillig, Thomas}, 387 | year={2017}, 388 | booktitle=oopsla, 389 | publisher={ACM}, 390 | pages={63:1-63:26} 391 | } 392 | 393 | @inproceedings{sql2, 394 | title={Automatically synthesizing sql queries from input-output examples}, 395 | author={Zhang, Sai and Sun, Yuyin}, 396 | booktitle=ase, 397 | pages={224--234}, 398 | year={2013}, 399 | organization={IEEE} 400 | } 401 | 402 | @inproceedings{myth, 403 | title={Type-and-example-directed program synthesis}, 404 | author={Osera, Peter-Michael and Zdancewic, Steve}, 405 | booktitle=pldi, 406 | pages={619--630}, 407 | year={2015}, 408 | organization={ACM} 409 | } 410 | 411 | @inproceedings{loop-free, 412 | title={Synthesis of loop-free programs}, 413 | author={Gulwani, Sumit and Jha, Susmit and Tiwari, Ashish and Venkatesan, Ramarathnam}, 414 | booktitle=pldi, 415 | pages={62--73}, 416 | year={2011}, 417 | organization={ACM} 418 | } 419 | 420 | @inproceedings{dual, 421 | title={Program synthesis using dual interpretation}, 422 | author={Tiwari, Ashish and Gasc{\'o}n, Adria and Dutertre, Bruno}, 423 | booktitle={Proc. International Conference on Automated Deduction}, 424 | pages={482--497}, 425 | year={2015}, 426 | organization={Springer} 427 | } 428 | 429 | @article{cdcl1, 430 | title={Conflict-driven clause learning SAT solvers}, 431 | author={Biere, Armin and Heule, Marijn and van Maaren, Hans and Walsh, Toby}, 432 | journal={Handbook of Satisfiability, Frontiers in Artificial Intelligence and Applications}, 433 | pages={131--153}, 434 | year={2009} 435 | } 436 | 437 | @inproceedings{cegis1, 438 | title={Syntax-guided synthesis}, 439 | author={Alur, Rajeev and Bodik, Rastislav and Juniwal, Garvit and Martin, Milo MK and Raghothaman, Mukund and Seshia, Sanjit A and Singh, Rishabh and Solar-Lezama, Armando and Torlak, Emina and Udupa, Abhishek}, 440 | booktitle=fmcad, 441 | pages={1--8}, 442 | year={2013}, 443 | organization={IEEE} 444 | } 445 | 446 | @inproceedings{cegis2, 447 | title={The Sketching Approach to Program Synthesis.}, 448 | author={Solar-Lezama, Armando}, 449 | booktitle={Proc. Asian Symposium on Programming Languages and Systems}, 450 | pages={4--13}, 451 | year={2009}, 452 | organization={Springer} 453 | } 454 | 455 | @book{cegis3, 456 | title={Program synthesis by sketching}, 457 | author={Solar-Lezama, Armando}, 458 | year={2008}, 459 | publisher={University of California, Berkeley} 460 | } 461 | 462 | @inproceedings{raychev2014code, 463 | title={Code completion with statistical language models}, 464 | author={Raychev, Veselin and Vechev, Martin and Yahav, Eran}, 465 | booktitle={PLDI}, 466 | volume={49}, 467 | number={6}, 468 | pages={419--428}, 469 | year={2014}, 470 | organization={ACM} 471 | } 472 | 473 | @inproceedings{raychev2016learning, 474 | title={Learning programs from noisy data}, 475 | author={Raychev, Veselin and Bielik, Pavol and Vechev, Martin and Krause, Andreas}, 476 | booktitle=popl, 477 | pages={761--774}, 478 | year={2016}, 479 | organization={ACM} 480 | } 481 | 482 | @inproceedings{raychev2015predicting, 483 | title={Predicting program properties from big code}, 484 | author={Raychev, Veselin and Vechev, Martin and Krause, Andreas}, 485 | booktitle={POPL}, 486 | volume={50}, 487 | number={1}, 488 | pages={111--124}, 489 | year={2015}, 490 | organization={ACM} 491 | } 492 | 493 | @inproceedings{mangal2015user, 494 | title={A user-guided approach to program analysis}, 495 | author={Mangal, Ravi and Zhang, Xin and Nori, Aditya V and Naik, Mayur}, 496 | booktitle={Proceedings of the 2015 10th Joint Meeting on Foundations of Software Engineering}, 497 | pages={462--473}, 498 | year={2015}, 499 | organization={ACM} 500 | } 501 | 502 | @misc{neo-tool, 503 | author={Yu Feng and Ruben Martins and Osbert Bastani and Isil Dillig}, 504 | title = {Neo}, 505 | howpublished = {\url{http://utopia-group.github.io/neo/}}, 506 | year={2018} 507 | } 508 | 509 | @inproceedings{maml, 510 | author = {Chelsea Finn and 511 | Pieter Abbeel and 512 | Sergey Levine}, 513 | title = {Model-Agnostic Meta-Learning for Fast Adaptation of Deep Networks}, 514 | booktitle = {Proceedings of the 34th International Conference on Machine Learning, 515 | {ICML} 2017, Sydney, NSW, Australia, 6-11 August 2017}, 516 | pages = {1126--1135}, 517 | year = {2017} 518 | } 519 | 520 | @inproceedings{sketch, 521 | author = {Armando Solar{-}Lezama and 522 | Liviu Tancau and 523 | Rastislav Bod{\'{\i}}k and 524 | Sanjit A. Seshia and 525 | Vijay A. Saraswat}, 526 | title = {Combinatorial sketching for finite programs}, 527 | booktitle = {Proceedings of the 12th International Conference on Architectural 528 | Support for Programming Languages and Operating Systems, {ASPLOS} 529 | 2006, San Jose, CA, USA, October 21-25, 2006}, 530 | pages = {404--415}, 531 | year = {2006} 532 | } 533 | 534 | @inproceedings{memsynth, 535 | author = {James Bornholt and 536 | Emina Torlak}, 537 | title = {Synthesizing memory models from framework sketches and Litmus tests}, 538 | booktitle = {Proceedings of the 38th {ACM} {SIGPLAN} Conference on Programming 539 | Language Design and Implementation, {PLDI} 2017, Barcelona, Spain, 540 | June 18-23, 2017}, 541 | pages = {467--481}, 542 | year = {2017} 543 | } 544 | 545 | @incollection{meta1, 546 | author = {Sebastian Thrun and 547 | Lorien Y. Pratt}, 548 | title = {Learning to Learn: Introduction and Overview}, 549 | booktitle = {Learning to Learn.}, 550 | pages = {3--17}, 551 | year = {1998} 552 | } 553 | 554 | @misc{ibias, 555 | author={wikipedia}, 556 | title = {Inductive Bias}, 557 | howpublished = {\url{https://en.wikipedia.org/wiki/Inductive_bias}}, 558 | year={2019} 559 | } 560 | 561 | @inproceedings{neo, 562 | author = {Yu Feng and 563 | Ruben Martins and 564 | Osbert Bastani and 565 | Isil Dillig}, 566 | title = {Program synthesis using conflict-driven learning}, 567 | booktitle = pldi, 568 | pages = {420--435}, 569 | year = {2018} 570 | } 571 | 572 | @article{autopandas, 573 | author = {Rohan Bavishi and 574 | Caroline Lemieux and 575 | Roy Fox and 576 | Koushik Sen and 577 | Ion Stoica}, 578 | title = {AutoPandas: neural-backed generators for program synthesis}, 579 | journal = {{PACMPL}}, 580 | volume = {3}, 581 | number = {{OOPSLA}}, 582 | pages = {168:1--168:27}, 583 | year = {2019} 584 | } 585 | 586 | @article{cho2014learning, 587 | title={Learning phrase representations using RNN encoder-decoder for statistical machine translation}, 588 | author={Cho, Kyunghyun and Van Merri{\"e}nboer, Bart and Gulcehre, Caglar and Bahdanau, Dzmitry and Bougares, Fethi and Schwenk, Holger and Bengio, Yoshua}, 589 | journal={arXiv preprint arXiv:1406.1078}, 590 | year={2014} 591 | } 592 | 593 | @inproceedings{parisotto2016neuro, 594 | title={Neuro-symbolic program synthesis}, 595 | author={Parisotto, Emilio and Mohamed, Abdel-rahman and Singh, Rishabh and Li, Lihong and Zhou, Dengyong and Kohli, Pushmeet}, 596 | booktitle={ICLR}, 597 | year={2017} 598 | } 599 | 600 | @inproceedings{bunel2018leveraging, 601 | title={Leveraging grammar and reinforcement learning for neural program synthesis}, 602 | author={Bunel, Rudy and Hausknecht, Matthew and Devlin, Jacob and Singh, Rishabh and Kohli, Pushmeet}, 603 | booktitle={ICLR}, 604 | year={2018} 605 | } 606 | 607 | @inproceedings{brockschmidt2019generative, 608 | title={Generative Code Modeling with Graphs}, 609 | author={Brockschmidt, Marc and Allamanis, Miltiadis and Gaunt, Alexander L. and Polozov, Oleksandr}, 610 | booktitle={ICLR}, 611 | year={2019} 612 | } 613 | 614 | @inproceedings{chen2018execution, 615 | title={Execution-guided neural program synthesis}, 616 | author={Chen, Xinyun and Liu, Chang and Song, Dawn}, 617 | booktitle={ICLR}, 618 | year={2018} 619 | } 620 | 621 | @inproceedings{richard2019program, 622 | title={Program Synthesis and Semantic Parsing with Learned Code Idioms}, 623 | author={Shin, Richard and Allamanis, Miltiadis and Brockschmidt, Marc and Polozov, Oleksandr}, 624 | booktitle={NeurIPS}, 625 | year={2019} 626 | } 627 | 628 | @inproceedings{bastani2018active, 629 | title={Active learning of points-to specifications}, 630 | author={Bastani, Osbert and Sharma, Rahul and Aiken, Alex and Liang, Percy}, 631 | booktitle={Proceedings of the 39th ACM SIGPLAN Conference on Programming Language Design and Implementation}, 632 | pages={678--692}, 633 | year={2018} 634 | } 635 | 636 | @inproceedings{mars, 637 | author = {Yanju Chen and 638 | Ruben Martins and 639 | Yu Feng}, 640 | title = {Maximal multi-layer specification synthesis}, 641 | booktitle = {Proceedings of the {ACM} Joint Meeting on European Software Engineering 642 | Conference and Symposium on the Foundations of Software Engineering, 643 | {ESEC/SIGSOFT} {FSE} 2019, Tallinn, Estonia, August 26-30, 2019}, 644 | pages = {602--612}, 645 | year = {2019} 646 | } 647 | 648 | @inproceedings{Si2018b, 649 | author = {Xujie Si and 650 | Yuan Yang and 651 | Hanjun Dai and 652 | Mayur Naik and 653 | Le Song}, 654 | title = {Learning a Meta-Solver for Syntax-Guided Program Synthesis}, 655 | booktitle = {7th International Conference on Learning Representations, {ICLR} 2019, 656 | New Orleans, LA, USA, May 6-9, 2019}, 657 | year = {2019} 658 | } 659 | 660 | @inproceedings{Si2018a, 661 | author = {Xujie Si and 662 | Hanjun Dai and 663 | Mukund Raghothaman and 664 | Mayur Naik and 665 | Le Song}, 666 | title = {Learning Loop Invariants for Program Verification}, 667 | booktitle = {Advances in Neural Information Processing Systems 31: Annual Conference 668 | on Neural Information Processing Systems 2018, NeurIPS 2018, 3-8 December 669 | 2018, Montr{\'{e}}al, Canada}, 670 | pages = {7762--7773}, 671 | year = {2018} 672 | } 673 | 674 | @article{coeus, 675 | author = {Jia Chen and 676 | Jiayi Wei and 677 | Yu Feng and 678 | Osbert Bastani and 679 | Isil Dillig}, 680 | title = {Relational verification using reinforcement learning}, 681 | journal = {{PACMPL}}, 682 | volume = {3}, 683 | number = {{OOPSLA}}, 684 | pages = {141:1--141:30}, 685 | year = {2019} 686 | } 687 | 688 | @inproceedings{Singh2018, 689 | author = {Gagandeep Singh and 690 | Markus P{\"{u}}schel and 691 | Martin T. Vechev}, 692 | title = {Fast Numerical Program Analysis with Reinforcement Learning}, 693 | booktitle = {Computer Aided Verification - 30th International Conference, {CAV} 694 | 2018, Held as Part of the Federated Logic Conference, FloC 2018, Oxford, 695 | UK, July 14-17, 2018, Proceedings, Part {I}}, 696 | pages = {211--229}, 697 | year = {2018} 698 | } 699 | 700 | @inproceedings{Neelakantan2, 701 | author = {Arvind Neelakantan and 702 | Quoc V. Le and 703 | Mart{\'{\i}}n Abadi and 704 | Andrew McCallum and 705 | Dario Amodei}, 706 | title = {Learning a Natural Language Interface with Neural Programmer}, 707 | booktitle = {5th International Conference on Learning Representations, {ICLR} 2017, 708 | Toulon, France, April 24-26, 2017, Conference Track Proceedings}, 709 | year = {2017}, 710 | crossref = {DBLP:conf/iclr/2017}, 711 | url = {https://openreview.net/forum?id=ry2YOrcge}, 712 | timestamp = {Thu, 25 Jul 2019 14:25:43 +0200}, 713 | biburl = {https://dblp.org/rec/bib/conf/iclr/NeelakantanLAMA17}, 714 | bibsource = {dblp computer science bibliography, https://dblp.org} 715 | } 716 | 717 | @inproceedings{Neelakantan1, 718 | author = {Arvind Neelakantan and 719 | Quoc V. Le and 720 | Ilya Sutskever}, 721 | title = {Neural Programmer: Inducing Latent Programs with Gradient Descent}, 722 | booktitle = {4th International Conference on Learning Representations, {ICLR} 2016, 723 | San Juan, Puerto Rico, May 2-4, 2016, Conference Track Proceedings}, 724 | year = {2016}, 725 | crossref = {DBLP:conf/iclr/2016}, 726 | url = {http://arxiv.org/abs/1511.04834}, 727 | timestamp = {Thu, 25 Jul 2019 14:25:37 +0200}, 728 | biburl = {https://dblp.org/rec/bib/journals/corr/NeelakantanLS15}, 729 | bibsource = {dblp computer science bibliography, https://dblp.org} 730 | } 731 | 732 | @inproceedings{seq2seq, 733 | title={Sequence to sequence learning with neural networks}, 734 | author={Sutskever, Ilya and Vinyals, Oriol and Le, Quoc V}, 735 | booktitle={Advances in neural information processing systems}, 736 | pages={3104--3112}, 737 | year={2014} 738 | } 739 | 740 | @inproceedings{migrator, 741 | author = {Yuepeng Wang and 742 | James Dong and 743 | Rushi Shah and 744 | Isil Dillig}, 745 | title = {Synthesizing database programs for schema refactoring}, 746 | booktitle = {Proceedings of the 40th {ACM} {SIGPLAN} Conference on Programming 747 | Language Design and Implementation, {PLDI} 2019, Phoenix, AZ, USA, 748 | June 22-26, 2019}, 749 | pages = {286--300}, 750 | year = {2019} 751 | } 752 | 753 | @inproceedings{l2, 754 | author = {John K. Feser and 755 | Swarat Chaudhuri and 756 | Isil Dillig}, 757 | title = {Synthesizing data structure transformations from input-output examples}, 758 | booktitle = {Proceedings of the 36th {ACM} {SIGPLAN} Conference on Programming 759 | Language Design and Implementation, Portland, OR, USA, June 15-17, 760 | 2015}, 761 | pages = {229--239}, 762 | year = {2015} 763 | } 764 | 765 | @inproceedings{flashmeta, 766 | author = {Oleksandr Polozov and 767 | Sumit Gulwani}, 768 | title = {FlashMeta: a framework for inductive program synthesis}, 769 | booktitle = {Proceedings of the 2015 {ACM} {SIGPLAN} International Conference on 770 | Object-Oriented Programming, Systems, Languages, and Applications, 771 | {OOPSLA} 2015, part of {SPLASH} 2015, Pittsburgh, PA, USA, October 772 | 25-30, 2015}, 773 | pages = {107--126}, 774 | year = {2015} 775 | } 776 | 777 | @inproceedings{rosette, 778 | author = {Emina Torlak and 779 | Rastislav Bod{\'{\i}}k}, 780 | title = {A lightweight symbolic virtual machine for solver-aided host languages}, 781 | booktitle = {{ACM} {SIGPLAN} Conference on Programming Language Design and Implementation, 782 | {PLDI} '14, Edinburgh, United Kingdom - June 09 - 11, 2014}, 783 | pages = {530--541}, 784 | year = {2014} 785 | } 786 | 787 | @inproceedings{osera2, 788 | author = {Jonathan Frankle and 789 | Peter{-}Michael Osera and 790 | David Walker and 791 | Steve Zdancewic}, 792 | title = {Example-directed synthesis: a type-theoretic interpretation}, 793 | booktitle = {Proceedings of the 43rd Annual {ACM} {SIGPLAN-SIGACT} Symposium on 794 | Principles of Programming Languages, {POPL} 2016, St. Petersburg, 795 | FL, USA, January 20 - 22, 2016}, 796 | pages = {802--815}, 797 | year = {2016} 798 | } 799 | 800 | @inproceedings{osera1, 801 | author = {Peter{-}Michael Osera and 802 | Steve Zdancewic}, 803 | title = {Type-and-example-directed program synthesis}, 804 | booktitle = {Proceedings of the 36th {ACM} {SIGPLAN} Conference on Programming 805 | Language Design and Implementation, Portland, OR, USA, June 15-17, 806 | 2015}, 807 | pages = {619--630}, 808 | year = {2015} 809 | } 810 | 811 | @InProceedings{Yu&al.18.emnlp.syntax, 812 | author = {Tao Yu and Michihiro Yasunaga and Kai Yang and Rui Zhang and Dongxu Wang and Zifan Li and Dragomir Radev}, 813 | title = {SyntaxSQLNet: Syntax Tree Networks for Complex and Cross-Domain Text-to-SQL Task}, 814 | year = {2018}, 815 | booktitle = {Proceedings of EMNLP}, 816 | publisher = {Association for Computational Linguistics}, 817 | } 818 | 819 | @inproceedings{DBLP:conf/emnlp/IyerKCZ18, 820 | author = {Srinivasan Iyer and 821 | Ioannis Konstas and 822 | Alvin Cheung and 823 | Luke Zettlemoyer}, 824 | title = {Mapping Language to Code in Programmatic Context}, 825 | booktitle = {Proceedings of the 2018 Conference on Empirical Methods in Natural 826 | Language Processing, Brussels, Belgium, October 31 - November 4, 2018}, 827 | pages = {1643--1652}, 828 | year = {2018}, 829 | crossref = {DBLP:conf/emnlp/2018}, 830 | url = {https://www.aclweb.org/anthology/D18-1192/}, 831 | timestamp = {Fri, 13 Sep 2019 13:08:45 +0200}, 832 | biburl = {https://dblp.org/rec/bib/conf/emnlp/IyerKCZ18}, 833 | bibsource = {dblp computer science bibliography, https://dblp.org} 834 | } 835 | 836 | @misc{chen2019multimodal, 837 | title={Multi-Modal Synthesis of Regular Expressions}, 838 | author={Qiaochu Chen and Xinyu Wang and Xi Ye and Greg Durrett and Isil Dillig}, 839 | year={2019}, 840 | eprint={1908.03316}, 841 | archivePrefix={arXiv}, 842 | primaryClass={cs.PL} 843 | } 844 | 845 | @inproceedings{ellis2018learning, 846 | title={Learning to infer graphics programs from hand-drawn images}, 847 | author={Ellis, Kevin and Ritchie, Daniel and Solar-Lezama, Armando and Tenenbaum, Josh}, 848 | booktitle={Advances in neural information processing systems}, 849 | pages={6059--6068}, 850 | year={2018} 851 | } 852 | 853 | @inproceedings{DBLP:conf/icml/NyeHTS19, 854 | author = {Maxwell I. Nye and 855 | Luke B. Hewitt and 856 | Joshua B. Tenenbaum and 857 | Armando Solar{-}Lezama}, 858 | title = {Learning to Infer Program Sketches}, 859 | booktitle = {Proceedings of the 36th International Conference on Machine Learning, 860 | {ICML} 2019, 9-15 June 2019, Long Beach, California, {USA}}, 861 | pages = {4861--4870}, 862 | year = {2019}, 863 | crossref = {DBLP:conf/icml/2019}, 864 | url = {http://proceedings.mlr.press/v97/nye19a.html}, 865 | timestamp = {Tue, 11 Jun 2019 15:37:38 +0200}, 866 | biburl = {https://dblp.org/rec/bib/conf/icml/NyeHTS19}, 867 | bibsource = {dblp computer science bibliography, https://dblp.org} 868 | } 869 | 870 | @article{miltner2019synthesizing, 871 | title={Synthesizing symmetric lenses}, 872 | author={Miltner, Anders and Maina, Solomon and Fisher, Kathleen and Pierce, Benjamin C and Walker, David and Zdancewic, Steve}, 873 | journal={Proceedings of the ACM on Programming Languages}, 874 | volume={3}, 875 | number={ICFP}, 876 | pages={1--28}, 877 | year={2019}, 878 | publisher={ACM New York, NY, USA} 879 | } 880 | 881 | @inproceedings{long2017automatic, 882 | title={Automatic inference of code transforms for patch generation}, 883 | author={Long, Fan and Amidon, Peter and Rinard, Martin}, 884 | booktitle={Proceedings of the 2017 11th Joint Meeting on Foundations of Software Engineering}, 885 | pages={727--739}, 886 | year={2017} 887 | } 888 | 889 | @inproceedings{shin2019program, 890 | title={Program synthesis and semantic parsing with learned code idioms}, 891 | author={Shin, Eui Chul and Allamanis, Miltiadis and Brockschmidt, Marc and Polozov, Alex}, 892 | booktitle={Advances in Neural Information Processing Systems}, 893 | pages={10824--10834}, 894 | year={2019} 895 | } 896 | 897 | @inproceedings{devlin2017robustfill, 898 | title={Robustfill: Neural program learning under noisy i/o}, 899 | author={Devlin, Jacob and Uesato, Jonathan and Bhupatiraju, Surya and Singh, Rishabh and Mohamed, Abdel-rahman and Kohli, Pushmeet}, 900 | booktitle={Proceedings of the 34th International Conference on Machine Learning-Volume 70}, 901 | pages={990--998}, 902 | year={2017}, 903 | organization={JMLR. org} 904 | } 905 | 906 | @inproceedings{DBLP:conf/iclr/MaoGKTW19, 907 | author = {Jiayuan Mao and 908 | Chuang Gan and 909 | Pushmeet Kohli and 910 | Joshua B. Tenenbaum and 911 | Jiajun Wu}, 912 | title = {The Neuro-Symbolic Concept Learner: Interpreting Scenes, Words, and 913 | Sentences From Natural Supervision}, 914 | booktitle = {7th International Conference on Learning Representations, {ICLR} 2019, 915 | New Orleans, LA, USA, May 6-9, 2019}, 916 | year = {2019}, 917 | crossref = {DBLP:conf/iclr/2019}, 918 | url = {https://openreview.net/forum?id=rJgMlhRctm}, 919 | timestamp = {Thu, 25 Jul 2019 13:03:16 +0200}, 920 | biburl = {https://dblp.org/rec/bib/conf/iclr/MaoGKTW19}, 921 | bibsource = {dblp computer science bibliography, https://dblp.org} 922 | } 923 | 924 | @inproceedings{DBLP:conf/nips/LiangNBLL18, 925 | author = {Chen Liang and 926 | Mohammad Norouzi and 927 | Jonathan Berant and 928 | Quoc V. Le and 929 | Ni Lao}, 930 | title = {Memory Augmented Policy Optimization for Program Synthesis and Semantic 931 | Parsing}, 932 | booktitle = {Advances in Neural Information Processing Systems 31: Annual Conference 933 | on Neural Information Processing Systems 2018, NeurIPS 2018, 3-8 December 934 | 2018, Montr{\'{e}}al, Canada}, 935 | pages = {10015--10027}, 936 | year = {2018}, 937 | crossref = {DBLP:conf/nips/2018}, 938 | url = {http://papers.nips.cc/paper/8204-memory-augmented-policy-optimization-for-program-synthesis-and-semantic-parsing}, 939 | timestamp = {Mon, 17 Dec 2018 07:51:43 +0100}, 940 | biburl = {https://dblp.org/rec/bib/conf/nips/LiangNBLL18}, 941 | bibsource = {dblp computer science bibliography, https://dblp.org} 942 | } 943 | 944 | @inproceedings{DBLP:conf/iclr/KalyanMPBJG18, 945 | author = {Ashwin Kalyan and 946 | Abhishek Mohta and 947 | Oleksandr Polozov and 948 | Dhruv Batra and 949 | Prateek Jain and 950 | Sumit Gulwani}, 951 | title = {Neural-Guided Deductive Search for Real-Time Program Synthesis from 952 | Examples}, 953 | booktitle = {6th International Conference on Learning Representations, {ICLR} 2018, 954 | Vancouver, BC, Canada, April 30 - May 3, 2018, Conference Track Proceedings}, 955 | year = {2018}, 956 | crossref = {DBLP:conf/iclr/2018}, 957 | url = {https://openreview.net/forum?id=rywDjg-RW}, 958 | timestamp = {Thu, 25 Jul 2019 14:25:54 +0200}, 959 | biburl = {https://dblp.org/rec/bib/conf/iclr/KalyanMPBJG18}, 960 | bibsource = {dblp computer science bibliography, https://dblp.org} 961 | } 962 | 963 | @inproceedings{DBLP:conf/nips/DaiLWSHK19, 964 | author = {Hanjun Dai and 965 | Yujia Li and 966 | Chenglong Wang and 967 | Rishabh Singh and 968 | Po{-}Sen Huang and 969 | Pushmeet Kohli}, 970 | title = {Learning Transferable Graph Exploration}, 971 | booktitle = {Advances in Neural Information Processing Systems 32: Annual Conference 972 | on Neural Information Processing Systems 2019, NeurIPS 2019, 8-14 973 | December 2019, Vancouver, BC, Canada}, 974 | pages = {2514--2525}, 975 | year = {2019}, 976 | crossref = {DBLP:conf/nips/2019}, 977 | url = {http://papers.nips.cc/paper/8521-learning-transferable-graph-exploration}, 978 | timestamp = {Mon, 13 Jan 2020 09:28:31 +0100}, 979 | biburl = {https://dblp.org/rec/bib/conf/nips/DaiLWSHK19}, 980 | bibsource = {dblp computer science bibliography, https://dblp.org} 981 | } 982 | 983 | @article{DBLP:journals/pacmpl/WangFBCD20, 984 | author = {Chenglong Wang and 985 | Yu Feng and 986 | Rastislav Bod{\'{\i}}k and 987 | Alvin Cheung and 988 | Isil Dillig}, 989 | title = {Visualization by example}, 990 | journal = {{PACMPL}}, 991 | volume = {4}, 992 | number = {{POPL}}, 993 | pages = {49:1--49:28}, 994 | year = {2020}, 995 | url = {https://doi.org/10.1145/3371117}, 996 | doi = {10.1145/3371117}, 997 | timestamp = {Mon, 13 Jan 2020 08:55:28 +0100}, 998 | biburl = {https://dblp.org/rec/bib/journals/pacmpl/WangFBCD20}, 999 | bibsource = {dblp computer science bibliography, https://dblp.org} 1000 | } 1001 | 1002 | @article{trinity, 1003 | title={Trinity: an extensible synthesis framework for data science}, 1004 | author={Martins, Ruben and Chen, Jia and Chen, Yanju and Feng, Yu and Dillig, Isil}, 1005 | journal={Proceedings of the VLDB Endowment}, 1006 | volume={12}, 1007 | number={12}, 1008 | pages={1914--1917}, 1009 | year={2019}, 1010 | publisher={VLDB Endowment} 1011 | } 1012 | 1013 | @inproceedings{sutton2000policy, 1014 | title={Policy gradient methods for reinforcement learning with function approximation}, 1015 | author={Sutton, Richard S and McAllester, David A and Singh, Satinder P and Mansour, Yishay}, 1016 | booktitle={Advances in neural information processing systems}, 1017 | pages={1057--1063}, 1018 | year={2000} 1019 | } 1020 | 1021 | @book{sygus, 1022 | title={Syntax-guided synthesis}, 1023 | author={Alur, Rajeev and Bodik, Rastislav and Juniwal, Garvit and Martin, Milo MK and Raghothaman, Mukund and Seshia, Sanjit A and Singh, Rishabh and Solar-Lezama, Armando and Torlak, Emina and Udupa, Abhishek}, 1024 | year={2013}, 1025 | publisher={IEEE} 1026 | } 1027 | 1028 | @inproceedings{lee2016synthesizing, 1029 | title={Synthesizing regular expressions from examples for introductory automata assignments}, 1030 | author={Lee, Mina and So, Sunbeom and Oh, Hakjoo}, 1031 | booktitle={Proceedings of the 2016 ACM SIGPLAN International Conference on Generative Programming: Concepts and Experiences}, 1032 | pages={70--80}, 1033 | year={2016} 1034 | } 1035 | 1036 | @inproceedings{levine2013guided, 1037 | title={Guided policy search}, 1038 | author={Levine, Sergey and Koltun, Vladlen}, 1039 | booktitle={International Conference on Machine Learning}, 1040 | pages={1--9}, 1041 | year={2013} 1042 | } -------------------------------------------------------------------------------- /report/main.tex: -------------------------------------------------------------------------------- 1 | \documentclass[sigplan,10pt,review]{acmart}\settopmatter{printfolios=true,printccs=false,printacmref=false} 2 | %% 3 | %% \BibTeX command to typeset BibTeX logo in the docs 4 | \AtBeginDocument{% 5 | \providecommand\BibTeX{{% 6 | \normalfont B\kern-0.5em{\scshape i\kern-0.25em b}\kern-0.8em\TeX}}} 7 | 8 | %% Rights management information. This information is sent to you 9 | %% when you complete the rights form. These commands have SAMPLE 10 | %% values in them; it is your responsibility as an author to replace 11 | %% the commands and values with those provided to you when you 12 | %% complete the rights form. 13 | \setcopyright{acmcopyright} 14 | \copyrightyear{2018} 15 | \acmYear{2018} 16 | \acmDOI{10.1145/1122445.1122456} 17 | 18 | %% These commands are for a PROCEEDINGS abstract or paper. 19 | \acmConference[Woodstock '18]{Woodstock '18: ACM Symposium on Neural 20 | Gaze Detection}{June 03--05, 2018}{Woodstock, NY} 21 | \acmBooktitle{Woodstock '18: ACM Symposium on Neural Gaze Detection, 22 | June 03--05, 2018, Woodstock, NY} 23 | \acmPrice{15.00} 24 | \acmISBN{978-1-4503-XXXX-X/18/06} 25 | 26 | 27 | %% 28 | %% Submission ID. 29 | %% Use this when submitting an article to a sponsored event. You'll 30 | %% receive a unique submission ID from the organizers 31 | %% of the event, and this ID should be used as the parameter to this command. 32 | %%\acmSubmissionID{123-A56-BU3} 33 | 34 | %% 35 | %% The majority of ACM publications use numbered citations and 36 | %% references. The command \citestyle{authoryear} switches to the 37 | %% "author year" style. 38 | %% 39 | %% If you are preparing content for an event 40 | %% sponsored by ACM SIGGRAPH, you must use the "author year" style of 41 | %% citations and references. 42 | %% Uncommenting 43 | %% the next command will enable that style. 44 | %%\citestyle{acmauthoryear} 45 | 46 | %% 47 | %% \BibTeX command to typeset BibTeX logo in the docs 48 | \AtBeginDocument{% 49 | \providecommand\BibTeX{{% 50 | \normalfont B\kern-0.5em{\scshape i\kern-0.25em b}\kern-0.8em\TeX}}} 51 | 52 | %% Rights management information. This information is sent to you 53 | %% when you complete the rights form. These commands have SAMPLE 54 | %% values in them; it is your responsibility as an author to replace 55 | %% the commands and values with those provided to you when you 56 | %% complete the rights form. 57 | \setcopyright{acmcopyright} 58 | \copyrightyear{2018} 59 | \acmYear{2018} 60 | \acmDOI{10.1145/1122445.1122456} 61 | 62 | %% These commands are for a PROCEEDINGS abstract or paper. 63 | \acmConference[Woodstock '18]{Woodstock '18: ACM Symposium on Neural 64 | Gaze Detection}{June 03--05, 2018}{Woodstock, NY} 65 | \acmBooktitle{Woodstock '18: ACM Symposium on Neural Gaze Detection, 66 | June 03--05, 2018, Woodstock, NY} 67 | \acmPrice{15.00} 68 | \acmISBN{978-1-4503-XXXX-X/18/06} 69 | 70 | 71 | %% 72 | %% Submission ID. 73 | %% Use this when submitting an article to a sponsored event. You'll 74 | %% receive a unique submission ID from the organizers 75 | %% of the event, and this ID should be used as the parameter to this command. 76 | %%\acmSubmissionID{123-A56-BU3} 77 | 78 | %% 79 | %% The majority of ACM publications use numbered citations and 80 | %% references. The command \citestyle{authoryear} switches to the 81 | %% "author year" style. 82 | %% 83 | %% If you are preparing content for an event 84 | %% sponsored by ACM SIGGRAPH, you must use the "author year" style of 85 | %% citations and references. 86 | %% Uncommenting 87 | %% the next command will enable that style. 88 | %%\citestyle{acmauthoryear} 89 | %% Bibliography style 90 | \bibliographystyle{ACM-Reference-Format} 91 | %% Citation style 92 | %% Note: author/year citations are required for papers published as an 93 | %% issue of PACMPL. 94 | % \citestyle{acmauthoryear} %% For author/year citations 95 | 96 | 97 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 98 | %% Note: Authors migrating a paper from PACMPL format to traditional 99 | %% SIGPLAN proceedings format must update the '\documentclass' and 100 | %% topmatter commands above; see 'acmart-sigplanproc-template.tex'. 101 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 102 | 103 | 104 | %% Some recommended packages. 105 | \usepackage{svg} 106 | \usepackage{booktabs} %% For formal tables: 107 | %% http://ctan.org/pkg/booktabs 108 | \usepackage{subcaption} %% For complex figures with subfigures/subcaptions 109 | %% http://ctan.org/pkg/subcaption 110 | \usepackage[utf8]{inputenc} 111 | \usepackage{amsmath,amssymb} 112 | \usepackage{amsthm} 113 | \usepackage{algorithm} 114 | \usepackage{algpseudocode} 115 | \usepackage{todonotes} 116 | \usepackage[misc,geometry]{ifsym} 117 | 118 | \usepackage{xspace} 119 | \usepackage{stmaryrd} 120 | \usepackage{comment} 121 | 122 | \usepackage{multirow} 123 | 124 | \usepackage{amsfonts} 125 | \usepackage{amsmath} 126 | \usepackage{amssymb} 127 | \usepackage{xcolor,colortbl} 128 | \definecolor{babypurple}{RGB}{222,201,255} 129 | \definecolor{lightgoldenrodyellow}{rgb}{0.98, 0.98, 0.82} 130 | \definecolor{babyred}{RGB}{220,210,214} 131 | %\definecolor{babygreen}{RGB}{169,189,183} 132 | \definecolor{camouflagegreen}{rgb}{0.47, 0.53, 0.42} 133 | \definecolor{babygreen}{rgb}{0.47, 0.53, 0.42} 134 | \definecolor{camel}{rgb}{0.76, 0.6, 0.42} 135 | \definecolor{darkpastelpurple}{rgb}{0.59, 0.44, 0.84} 136 | \usepackage{listings} 137 | \usepackage{xparse} 138 | \usepackage{threeparttable} 139 | \usepackage{proof} 140 | \usepackage{enumitem} 141 | \usepackage{ulem} 142 | \normalem 143 | 144 | \usepackage{tikz} 145 | \usetikzlibrary{positioning,shapes,arrows} 146 | \usetikzlibrary{patterns} 147 | \usepackage{pgfplots} 148 | 149 | \usepackage{booktabs} 150 | 151 | \DeclareMathOperator*{\argmax}{arg\,max} 152 | \DeclareMathOperator*{\argmin}{arg\,min} 153 | \input{macros} 154 | 155 | \begin{document} 156 | 157 | %% Title information 158 | \title[Short Title]{CS292C Final Project Report} %% [Short Title] is optional; 159 | %% when present, will be used in 160 | %% header instead of Full Title. 161 | % \titlenote{with title note} %% \titlenote is optional; 162 | %% can be repeated if necessary; 163 | %% contents suppressed with 'anonymous' 164 | % \subtitle{Subtitle} %% \subtitle is optional 165 | % \subtitlenote{with subtitle note} %% \subtitlenote is optional; 166 | %% can be repeated if necessary; 167 | %% contents suppressed with 'anonymous' 168 | 169 | 170 | %% Author information 171 | %% Contents and number of authors suppressed with 'anonymous'. 172 | %% Each author should be introduced by \author, followed by 173 | %% \authornote (optional), \orcid (optional), \affiliation, and 174 | %% \email. 175 | %% An author may have multiple affiliations and/or emails; repeat the 176 | %% appropriate command. 177 | %% Many elements are not rendered, but should be provided for metadata 178 | %% extraction tools. 179 | 180 | %% Author with single affiliation. 181 | \author{First1 Last1} 182 | % \authornote{with author1 note} %% \authornote is optional; 183 | %% can be repeated if necessary 184 | \orcid{nnnn-nnnn-nnnn-nnnn} %% \orcid is optional 185 | \affiliation{ 186 | \department{Department1} %% \department is recommended 187 | \institution{Institution1} %% \institution is required 188 | } 189 | \email{first1.last1@inst1.edu} %% \email is recommended 190 | 191 | %% Author with two affiliations and emails. 192 | \author{First2 Last2} 193 | % \authornote{with author2 note} %% \authornote is optional; 194 | %% can be repeated if necessary 195 | \orcid{nnnn-nnnn-nnnn-nnnn} %% \orcid is optional 196 | \affiliation{ 197 | \department{Department2a} %% \department is recommended 198 | \institution{Institution2a} %% \institution is required 199 | } 200 | \email{first2.last2@inst2a.com} %% \email is recommended 201 | 202 | 203 | %% Abstract 204 | %% Note: \begin{abstract}...\end{abstract} environment must come 205 | %% before \maketitle command 206 | \input{abstract} 207 | 208 | 209 | %% 2012 ACM Computing Classification System (CSS) concepts 210 | %% Generate at 'http://dl.acm.org/ccs/ccs.cfm'. 211 | \begin{CCSXML} 212 | 213 | 214 | 10011007.10011006.10011008 215 | Software and its engineering~General programming languages 216 | 500 217 | 218 | 219 | 10003456.10003457.10003521.10003525 220 | Social and professional topics~History of programming languages 221 | 300 222 | 223 | 224 | \end{CCSXML} 225 | 226 | \ccsdesc[500]{Software and its engineering~General programming languages} 227 | \ccsdesc[300]{Social and professional topics~History of programming languages} 228 | %% End of generated code 229 | 230 | 231 | %% Keywords 232 | %% comma separated list 233 | \keywords{Program synthesis} %% \keywords are mandatory in final camera-ready submission 234 | 235 | 236 | %% \maketitle 237 | %% Note: \maketitle command must come after title commands, author 238 | %% commands, abstract environment, Computing Classification System 239 | %% environment and commands, and keywords command. 240 | \maketitle 241 | 242 | 243 | \input{intro} 244 | \input{overview} 245 | \input{problem} 246 | \input{algorithm} 247 | \input{impl} 248 | \input{eval} 249 | \input{related} 250 | \input{concl} 251 | 252 | %% Bibliography 253 | \bibliography{main} 254 | 255 | 256 | %% Appendix 257 | % \appendix 258 | % \section{Appendix} 259 | 260 | % Text of appendix \ldots 261 | 262 | \end{document} 263 | -------------------------------------------------------------------------------- /report/overview.tex: -------------------------------------------------------------------------------- 1 | \section{Overview} 2 | \label{sec:overview} 3 | 4 | TBD. -------------------------------------------------------------------------------- /report/problem.tex: -------------------------------------------------------------------------------- 1 | \section{Problem Formulation} 2 | \label{sec:prob} 3 | 4 | TBD. 5 | 6 | -------------------------------------------------------------------------------- /report/related.tex: -------------------------------------------------------------------------------- 1 | \section{Related work}~\label{sec:related} 2 | TBD. --------------------------------------------------------------------------------