This is the code for the ECOOP 2023 paper: Do Machine Learning Models Produce TypeScript Types that Type Check?
The main branch of this
repository is the latest development branch.
The
ecoop2023-artifact
branch is a snapshot of the repository that was used to prepare the ECOOP 2023
artifact.
- Hardware: a GPU with at least 14 GB of VRAM
- It is possible to skip the experiments that require a GPU
- Software:
- Linux
- Python +3.6 and the
tqdmpackage (pip install tqdm) - Optional, for dataset construction:
- Node +16
- git
- Podman with the NVIDIA container toolkit
- All other dependencies are managed with OCI images
- Docker may be used instead of Podman, but has not been tested
- It is possible to run without containers, but not recommended, as setting up the dependencies is very difficult
The Makefile has the following targets:
-
build: build the project -
all: run everything -
predict-all: run type prediction for all models -
weave-all: run type weaving for all models -
typecheck-all: run type checking for all models -
predict,weave,typecheck: run type prediction, type weaving, or type checking, for the model specified by theMODELvariable -
csv: generate summary CSVs
By default, containers are built and used to invoke the models. If dependencies are satisfied, it is possible to run without containers:
make NOCONTAINERS=true build
make NOCONTAINERS=true all
Setting this variable will skip the InCoder experiments, which require a GPU:
make NOGPU=true all
When running make predict, make weave, or make typecheck, the MODEL
variable must be provided, e.g.:
make MODEL=DeepTyper predict
This will run type prediction for DeepTyper and no other model.
MODEL must be one of: DeepTyper, LambdaNet, or InCoder.
By default, make all will use all available processors on the machine.
This can be configured:
make NPROC=8 all
The other targets only use a single processor.
By default, we use Podman. To use Docker (or another container implementation),
set the DOCKER variable:
make DOCKER=docker build
make DOCKER=docker shell
DOCKER=docker ./run.sh