Daniel's photo

Hello! I am Daniel. I am a Software Engineering Ph.D. Student at the Institute for Software Research at Carnegie Mellon University and Instituto Superior Técnico, Universidade de Lisboa. My advisors are Claire Le Goues and Ruben Martins at CMU, and Vasco Manquinho at IST. My research aims to help developers by automating tedious (but necessary!) refactoring tasks. Specifically, I work on automatic library migration, transpilation, and program synthesis. I am always eager to talk about my research, so if you are interested please shoot me a message!

Previously, I worked on Program Synthesis as a Junior Researcher at INESC-ID. I have a master's degree in Computer Science from Instituto Superior Técnico, Universidade de Lisboa.

Short Resume


SOAR: A Synthesis Approach for Data Science API Refactoring (ICSE'21).

With the growth of the open-source data science community, both the number of data science libraries and the number of versions for the same library are increasing rapidly. To match the evolving APIs from those libraries, open-source organizations often have to exert manual effort to refactor the APIs used in the code base. SOAR aims to automate these refactoring tasks.

UnchartIt: An Interactive Framework for Program Recovery from Charts (ASE'20).

UnchartIt is the first program synthesizer to recover data transformations from chart images. Given an input table and a chart, UnchartIt automatically recovers the data transformations in four steps: data extraction, candidate generation, candidate ranking, and candidate disambiguation.


UnchartIt Distinguisher - Program Distinguisher for Data Science.

Programming-By-Example (PBE) is the task of automatically generating a program from a set of input-output examples. One major concern in PBE is that specifying user-intent through examples usually leads to ambiguity. Thus, there might be multiple non-equivalent programs that satisfy examples the user provides. Moreover, these programs can behave very differently when provided with a different set of inputs. UnchartIt Distinguisher's allows for the disambiguation of such programs through two different user interaction models.