Contributing to MIPVerify

July 25, 2026 · View on GitHub

Welcome, and thank you for considering contributing to MIPVerify. To begin contributing, start by installing Julia.

Setup

Basic Setup

If you are making changes to only documentation or tests — or are making changes to core functionality that will be tested with unit tests — you can simply check out this repository and start making changes.

Advanced Setup

If you want to make changes to the MIPVerify package code, and run an existing Julia script that imports the package, the most convenient approach is to use Pkg.develop.

$ julia -e 'using Pkg; Pkg.develop("MIPVerify")'
     Cloning git-repo `https://github.com/vtjeng/MIPVerify.jl.git`
  [...]
    Updating `~/.julia/environments/v1.7/Project.toml`
  [e5e5f8be] + MIPVerify v0.5.1 `~/.julia/dev/MIPVerify`
    Updating `~/.julia/environments/v1.7/Manifest.toml`
  [...]

The repository is now checked out at the specified location (in this case, ~/.julia/dev/MIPVerify).

Running Tests

Tests for this directory are found in test/runtests.jl. (See Julia language docs). They are run for each PR via the test job for the .github/workflows/CI.yml GitHub action.

Running all tests locally

To run all tests for the package, run this command from the package directory:

julia --project -e 'using Pkg; Pkg.test("MIPVerify")'

The default suite skips validation of the full CIFAR10 data asset because loading it requires about 1.5 GiB of memory. CI enables the check on its Linux job running the latest stable Julia. Include it locally with:

MIPVERIFY_RUN_LARGE_DATASET_TESTS=true julia --project -e 'using Pkg; Pkg.test("MIPVerify")'

Sample output from a warm Julia 1.12.6 run is shown below. Runtime and allocations vary by machine, but the table identifies the expensive test groups.

 Tot / % measured:                         199s / 99.3%        9.10GiB / 99.3%

 Section                              ncalls     time    %tot     alloc    %tot
 integration/                              1     121s   61.3%   3.96GiB   43.8%
   generated_weights/                      1     113s   57.2%   3.72GiB   41.2%
     conv+fc+softmax.jl                    1    82.6s   41.9%    887MiB    9.6%
       BlurringPerturbationFamily          1    65.7s   33.3%    780MiB    8.4%
     mfc+mfc+softmax.jl                    1    30.0s   15.2%   2.85GiB   31.6%
 net_components/                           1    37.5s   19.0%   1.93GiB   21.4%
 utils/                                    1    23.0s   11.7%   2.11GiB   23.3%
   import_datasets.jl                      1    13.7s    6.9%   1.40GiB   15.5%
   import_example_nets.jl                  1    8.65s    4.4%    702MiB    7.6%
 batch_processing_helpers/                 1    15.8s    8.0%   1.04GiB   11.5%
   integration.jl                          1    12.1s    6.1%    848MiB    9.2%

Test Summary: | Pass  Broken  Total     Time
MIPVerify     |  518       1    519  3m18.6s
     Testing MIPVerify tests passed

Running a subset of tests locally

After cloning the repository or changing test dependencies, instantiate the test project:

julia --project=test -e 'using Pkg; Pkg.instantiate()'

Then run a test file directly for faster iteration. For example:

julia --project=test test/models.jl

Preparing your PR for review

Ensure that your PR passes all required statuses.

Formatting

Run the format script before pushing. It formats the whole repository with the same tool versions that CI checks against: JuliaFormatter for .jl, Ruff for .py, and Prettier for .md and .yaml.

./scripts/format.sh

Contribution Types

There are many ways to contribute to this package.

Note: If you're new to Julia, consider working on one of the issues labeled "good first issue".

Contributing to core functionality

We're excited to hear what new ideas you have for verification, and would be happy to discuss how best to implement it.

Contributing datasets / networks

If you have an interesting new dataset, or a new network that you'll like to verify the robustness of, please consider opening a PR to share it with other users of this package.

Improving Documentation

We use Documenter.jl, and documentation is stored in the docs/ directory.

Documentation is generated as part of the build process.

To generate documentation locally, run the following command from the docs/ directory

julia make.jl

The generated documentation will be found in the docs/build/ directory.

Writing Tests

Tests are stored in the test/ directory, which has a parallel structure to the src/ directory.

Information on current test coverage can be found on codecov.

Acknowledgements

This document was adapted from Julia's CONTRIBUTING.md.