  API recommendation in real-time is challenging for dynamic languages like
Python. Many existing API recommendation techniques are highly effective, but
they mainly support static languages. A few Python IDEs provide API
recommendation functionalities based on type inference and training on a large
corpus of Python libraries and third-party libraries. As such, they may fail to
recommend or make poor recommendations when type information is missing or
target APIs are project-specific. In this paper, we propose a novel approach,
PyART, to recommend APIs for Python programs in real-time. It features a
light-weight analysis to derives so-called optimistic data-flow, which is
neither sound nor complete, but simulates the local data-flow information
humans can derive. It extracts three kinds of features: data-flow, token
similarity, and token co-occurrence, in the context of the program point where
a recommendation is solicited. A predictive model is trained on these features
using the Random Forest algorithm. Evaluation on 8 popular Python projects
demonstrates that PyART can provide effective API recommendations. When
historic commits can be leveraged, which is the target scenario of a
state-of-the-art tool ARIREC, our average top-1 accuracy is over 50% and
average top-10 accuracy over 70%, outperforming APIREC and Intellicode (i.e.,
the recommendation component in Visual Studio) by 28.48%-39.05% for top-1
accuracy and 24.41%-30.49% for top-10 accuracy. In other applications such as
when historic comments are not available and cross-project recommendation,
PyART also shows better overall performance. The time to make a recommendation
is less than a second on average, satisfying the real-time requirement.
