  Software developers use Application Programming Interfaces (APIs) of
libraries and frameworks extensively while writing programs. In this context,
the recommendations provided in code completion pop-ups help developers choose
the desired methods. The candidate lists recommended by these tools, however,
tend to be large, ordered alphabetically and sometimes even incomplete. A fair
amount of work has been done recently to improve the relevance of these code
completion results, especially for statically typed languages like Java.
However, these proposed techniques rely on the static type of the object and
are therefore inapplicable for a dynamically typed language like Python. In
this paper, we present PyReco, an intelligent code completion system for Python
which uses the mined API usages from open source repositories to order the
results based on relevance rather than the conventional alphabetic order. To
recommend suggestions that are relevant for a working context, a nearest
neighbor classifier is used to identify the best matching usage among all the
extracted usage patterns. To evaluate the effectiveness of our system, the code
completion queries are automatically extracted from projects and tested
quantitatively using a ten-fold cross validation technique. The evaluation
shows that our approach outperforms the alphabetically ordered API
recommendation systems in recommending APIs for standard, as well as,
third-party libraries.
