-
Couldn't load subscription status.
- Fork 24
Rewrite SCIP wrapper with Clang.jl to support a MIP solver through MOI #76
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Changes from all commits
Commits
Show all changes
82 commits
Select commit
Hold shift + click to select a range
158beb4
add gen/generate_wrapper.jl
rschwarz 39d47e9
add folder for generated wrapper files
rschwarz 7c3b621
wrap all scip_*.h files
rschwarz c4bb9ac
wrap selected type_*.h headers
rschwarz 4d5ef74
wrap almost all type_*.h headers
rschwarz 479aae1
don't add pub_*.h headers (for now)
rschwarz d221a07
also wrap type_var.h
rschwarz d84a772
adapt generate_wrapper.jl to `restruct` branch of Clang.jl
rschwarz 41c21f9
no special order of type_* headers in generate_wrapper.jl
rschwarz 92d3685
regenerate wrapper
rschwarz baa31dd
reset README
rschwarz 8e1ee3e
update LICENSE, REQUIRE
rschwarz 3fd6395
delete most of the old code (and tests)
rschwarz 91dbc68
add deps/build.jl
rschwarz 9f9b2be
include all wrappers into another file
rschwarz fbc281f
add some manually wrapped constants :-(
rschwarz a58373e
rename type SCIP to SCIP_, avoid name conflict with module
rschwarz 8a3f945
manually define FILE
rschwarz 31b9959
include nlpi headers in generate_wrapper.jl
rschwarz 187ea2b
include lpi headers in generate_wrapper.jl
rschwarz fe558bd
manually define BMS_{BLK,BUF}MEM
rschwarz 8c60dff
check version during module init
rschwarz e9282e0
start on first test
rschwarz b9d1f7c
generate wrapper for scipdefplugins.h
rschwarz 93218b4
wrap included tests in named testset
rschwarz dd9bea0
extend first test
rschwarz c1c5f8d
build.jl: check environment variable first
rschwarz 94749bc
extend first test (actually add variable)
rschwarz e7401cf
generate_wrapper: include all cons_* headers
rschwarz b53ca2a
test: add linear constraint
rschwarz 4810361
fix type in test
rschwarz 543a572
add MOI to REQUIRE
rschwarz 81ce845
prepare MOI_wrapper.jl
rschwarz f35860a
add ManagedSCIP (for memory) and include in Optimizer
rschwarz 49bbe94
manage vars, conss for ManagedSCIP
rschwarz 42bed2d
add simple @SC macro for SCIP_CALL
rschwarz f50bef4
add Travis CI config
rschwarz d3316aa
travis: install scip .deb package
rschwarz 5a96eae
travis: add `using Pkg`
rschwarz 5d08d9a
travis: install some dependencies
rschwarz 2f8cd78
add .codecov.yml
rschwarz de1a030
implement more methods to support contlineartest (WIP)
rschwarz eab75e8
generate_wrapper: include pub_*.h headers
rschwarz 041024d
implement enough of MOI to get to the actual solution query
rschwarz e74b98d
implement status and solution queries
rschwarz c6ed123
add allow_modification(o) to reset SCIP stage
rschwarz 60c26ec
implement more problem modification
rschwarz b97dcff
do not support linear constraints with constant offset
rschwarz 85ea505
add more solution queries
rschwarz 0abb816
enable some MOI contlinear tests
rschwarz f4b71d8
fix ResultCount for unbounded problems
rschwarz 49494b4
support basic, generic parameter setting
rschwarz aa3d318
disable SCIP output for MOI tests
rschwarz f34c1d0
fix get(ConstraintPrimal, SingleVariable)
rschwarz 92d42b9
support problem and variable names
rschwarz a99be15
support names for some constraints
rschwarz 3d92cfc
try to support names for SingleVariable constraints
rschwarz ee976e7
partially revert support for names
rschwarz 110682c
use abbreviations for MOI types
rschwarz acecde3
support variable types binary, integer
rschwarz 97a2108
add more solve statistics
rschwarz b3ef38d
enable some intlineartests
rschwarz e1821f1
update README
rschwarz 7e4054b
README: fix typos
rschwarz 279fae4
README: fix typo, more detail about pointer types
rschwarz c5d54e3
add dummy SCIPSolver() to warn old users about MPB/MOI.
rschwarz 5f5d2c1
rm dependency on Compat
rschwarz cb51e3d
add version check agains upper bound (next major)
rschwarz b4e7529
documentation formatting
rschwarz 881b9a7
added documentation
rschwarz d098f10
use get_* functions more
rschwarz d7c20e0
rm get_ prefix for accessor functions
rschwarz 8a89494
introduce VarRef, ConsRef in place of Ints
rschwarz d231570
add copyright notice to files from Clang.jl
rschwarz d8a5fd8
reconsider type aliases
rschwarz 8d70941
add explicit return keywords to functions
rschwarz 3ea173a
rm empty test/REQUIRE
rschwarz 04e31fe
rm test that depends on GC behavior
rschwarz f4b5883
add test for memory mgmt with solving
rschwarz 7da7c14
warn about setting FEASIBLITY_SENSE
rschwarz 3ed02b0
map gap limit to MOI.OPTIMAL (conform with other solvers)
rschwarz 3b4f087
constant names consistent with style guide
rschwarz File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,2 @@ | ||
| ignore: | ||
| - "src/wrapper/*" |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -3,9 +3,4 @@ | |
| *.jl.*.cov | ||
| *.jl.mem | ||
| deps/deps.jl | ||
| deps/downloads/ | ||
| deps/src/ | ||
| deps/usr/ | ||
| deps/build.log | ||
| /test/test.lp | ||
| /test/test.mps | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,23 +1,27 @@ | ||
| # Documentation: http://docs.travis-ci.com/user/languages/julia/ | ||
| ## Documentation: http://docs.travis-ci.com/user/languages/julia/ | ||
| language: julia | ||
| os: | ||
| - linux | ||
| os: linux | ||
| dist: xenial | ||
| sudo: true | ||
| julia: | ||
| - 0.7 | ||
| - 1.0 | ||
| dist: trusty | ||
| sudo: required | ||
| services: | ||
| - docker | ||
| before_install: | ||
| - echo "**** pulling Docker image" | ||
| - docker pull leethargo/scip-julia | ||
| - nightly | ||
| notifications: | ||
| email: false | ||
| git: | ||
| depth: 99999999 | ||
| matrix: | ||
| allow_failures: | ||
| - julia: nightly | ||
| before_install: | ||
| - sudo apt-get install libblas-dev liblapack-dev gfortran | ||
| - export VERSION=6.0.0 | ||
| - wget http://scip.zib.de/download/release/SCIPOptSuite-$VERSION-Linux.deb | ||
| - sudo dpkg -i SCIPOptSuite-$VERSION-Linux.deb | ||
| script: | ||
| - echo "**** running Docker" | ||
| - docker run --env-file travis_docker_env.list -t -a STDOUT -a STDIN -a STDERR -v $PWD:/mnt leethargo/scip-julia /mnt/travis_docker_test_script.sh $TRAVIS_JULIA_VERSION | ||
| - julia -e 'using Pkg; Pkg.clone(pwd()); Pkg.build("SCIP"); Pkg.test("SCIP"; coverage=true)' | ||
| after_success: | ||
| # push coverage results to Coveralls, .cov files were copied back by script above | ||
| - echo "**** submitting coverage information" | ||
| - julia -e 'using Pkg; Pkg.add("Coverage"); using Coverage; Coveralls.submit(process_folder()); Codecov.submit(Codecov.process_folder())' | ||
| # push coverage results to Coveralls | ||
| - julia -e 'using Pkg; cd(Pkg.dir("SCIP")); Pkg.add("Coverage"); using Coverage; Coveralls.submit(Coveralls.process_folder())' | ||
| # push coverage results to Codecov | ||
| - julia -e 'using Pkg; cd(Pkg.dir("SCIP")); Pkg.add("Coverage"); using Coverage; Codecov.submit(Codecov.process_folder())' |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,64 +1,91 @@ | ||
| # SCIP.jl | ||
|
|
||
| Julia interface to [SCIP](http://scip.zib.de) solver. | ||
|
|
||
| [](https://travis-ci.org/SCIP-Interfaces/SCIP.jl) | ||
| [](https://coveralls.io/github/SCIP-Interfaces/SCIP.jl?branch=master) | ||
| [](https://codecov.io/gh/SCIP-Interfaces/SCIP.jl) | ||
|
|
||
| ## Related Projects | ||
|
|
||
| - [SCIP](http://scip.zib.de): actual solver (implemented in C) that is wrapped | ||
| for Julia. | ||
| - [CSIP](https://github.com/SCIP-Interfaces/CSIP): restricted and simplified C | ||
| interface to SCIP which our wrapper is based on. | ||
| - [SCIP.jl](https://github.com/ryanjoneil/SCIP.jl): previous attempt to | ||
| interface SCIP from Julia, using autogenerated wrapper code for all public | ||
| functions. | ||
| - [MathProgBase](https://github.com/JuliaOpt/MathProgBase.jl): We aim to | ||
| implement MPB's abstract solver interfaces, so that one can use SCIP.jl | ||
| through [JuMP](https://github.com/JuliaOpt/JuMP.jl). For now, the | ||
| `LinearQuadraticModel` interface is implemented, supporting lazy constraint | ||
| and heuristic callbacks. | ||
|
|
||
| ## Installation | ||
|
|
||
| **Note**: These instructions are meant for and only tested with GNU/Linux. OS X used to work, | ||
| but there is an issue (#46) since the update to SCIP 4.0.0. | ||
|
|
||
| Follow the steps below to get SCIP.jl working. Unfortunately, these steps can not be automated as part of `Pkg.build("SCIP")`, because the academic license of SCIP does not allow distribution of the source code without tracking the download metadata. See the [license](http://scip.zib.de/academic.txt) for details. | ||
|
|
||
| 1.The SCIP.jl package requires [SCIP](http://scip.zib.de/) to be installed in a recent version (e.g. 6.0.0). | ||
| [Download](http://scip.zib.de) the SCIP Optimization Suite. | ||
| ``` | ||
| tar xzf scipoptsuite-6.0.0.tgz | ||
| ``` | ||
|
|
||
| 2.Choose an installation path and set the **environment variable `SCIPOPTDIR`** to point there. | ||
| ``` | ||
| export SCIPOPTDIR=`my/install/dir` | ||
| ``` | ||
|
|
||
| 3.Build and install the shared library with | ||
| ``` | ||
| mkdir build | ||
| cd build | ||
| cmake -DCMAKE_INSTALL_PREFIX=$SCIPOPTDIR .. | ||
| make | ||
| make install | ||
| ``` | ||
|
|
||
| 4.This package is registered in `METADATA.jl` and can be installed in Julia with | ||
| ``` | ||
| Pkg.add("SCIP") | ||
| ``` | ||
|
|
||
| ## Setting Parameters | ||
|
|
||
| SCIP has a [long list of parameters](http://scip.zib.de/doc/html/PARAMETERS.php) | ||
| that can all be set through SCIP.jl, by passing them to the constructor of | ||
| `SCIPSolver`. To set a value `val` to a parameter `name`, pass the two | ||
| parameters `(name, val)`. For example, let's set two parameters, to disable | ||
| output and increase the gap limit to 0.05: | ||
| ``` | ||
| solver = SCIPSolver("display/verblevel", 0, "limits/gap", 0.05) | ||
| ``` | ||
| ## Update (December 2018) | ||
|
|
||
| We have completely rewritten the interface from scratch, using | ||
| [Clang.jl](https://github.com/ihnorton/Clang.jl) to generate wrappers based on | ||
| the headers of the SCIP library. | ||
| The goal is to support [JuMP](https://github.com/JuliaOpt/JuMP.jl) (from version | ||
| 0.19 on) through | ||
| [MathOptInterface](https://github.com/JuliaOpt/MathOptInterface.jl). | ||
|
|
||
| Currently, we support LP and MIP problems only. | ||
| This means we still have a feature loss in the areas as nonlinear constraints as | ||
| well as supported callbacks compared to previous versions (see below). | ||
|
|
||
| ## Getting Started | ||
|
|
||
| To use SCIP.jl, you will need [SCIP](http://scip.zib.de) installed on your | ||
| system. [SCIP's license](https://scip.zib.de/index.php#license) does not allow | ||
| (automatic) redistribution, so please | ||
| [download](https://scip.zib.de/index.php#download) and install it yourself. | ||
|
|
||
| Only Linux is tested and officially supported. Contributions to supporting other | ||
| operating systems are welcome. | ||
|
|
||
| We recommend using one of the provided installers, e.g., | ||
| `SCIPOptSuite-6.0.0-Linux.deb` for systems based on Debian. Adding the SCIP.jl | ||
| package should then work out of the box: | ||
|
|
||
| pkg> add SCIP | ||
|
|
||
| If you [build SCIP from source](https://scip.zib.de/doc-6.0.0/html/CMAKE.php) | ||
| you should set the environment variable `SCIPOPTDIR` to point the the | ||
| **installation path**. That is, `$SCIPOPTDIR/lib/libscip.so` should exist. | ||
|
|
||
| ## Design Considerations | ||
|
|
||
| **Wrapper of Public API**: All of SCIP's public API methods are wrapped and | ||
| available within the `SCIP` package. This includes the `scip_*.h` and `pub_*.h` | ||
| headers that are collected in `scip.h`, as well as all default constraint | ||
| handlers (`cons_*.h`.) But the wrapped functions do not transform any data | ||
| structures and work on the *raw* pointers (e.g. `SCIP*` in C, `Ptr{SCIP_}` in | ||
| Julia). Convenience wrapper functions based on Julia types are added as needed. | ||
|
|
||
| **Memory Management**: Programming with SCIP requires dealing with variable and | ||
| constraints objects that use [reference | ||
| counting](https://scip.zib.de/doc-6.0.0/html/OBJ.php) for memory management. | ||
| SCIP.jl provides a wrapper type `ManagedSCIP` that collects lists of `SCIP_VAR*` | ||
| and `SCIP_CONS*` under the hood, and releases all reference when it is garbage | ||
| collected itself (via `finalize`). When adding a variable (`add_variable`) or a | ||
| constraint (`add_linear_constraint`), an integer index is returned. This index | ||
| can be used to retrieve the `SCIP_VAR*` or `SCIP_CONS*` pointer via `get_var` | ||
| and `get_cons` respectively. | ||
|
|
||
| `ManagedSCIP` does not currently support deletion of variables or constraints. | ||
|
|
||
| **Supported Features for MathOptInterface**: We aim at exposing many of SCIP's | ||
| features through MathOptInterface. However, the focus is on keeping the wrapper | ||
| simple and avoiding duplicate storage of model data. | ||
|
|
||
| As a consequence, we do not currently support some features such as retrieving | ||
| constraints by name (`SingleVariable`-set constraints are not stored as SCIP | ||
| constraints explicitly). | ||
|
|
||
| Support for more constraint types (quadratic/SOC, SOS1/2, nonlinear expression) | ||
| is planned, but SCIP itself only supports affine objective functions, so we will | ||
| stick with that. More general objective functions could be implented via a | ||
| [bridge](https://github.com/JuliaOpt/MathOptInterface.jl/issues/529). | ||
|
|
||
| ## Old Interface Implementation | ||
|
|
||
| A previous implementation of SCIP.jl supported | ||
| [JuMP](https://github.com/JuliaOpt/JuMP.jl) (up to version 0.18) through | ||
| [MathProgBase](https://github.com/JuliaOpt/MathOptInterface.jl). It did not | ||
| interface SCIP directly, but went through | ||
| [CSIP](https://github.com/SCIP-Interfaces/CSIP), a simplified C wrapper. | ||
|
|
||
| Back then, the interface support MINLP problems as well as solver-indepentent | ||
| callbacks for lazy constraints and heuristics. | ||
|
|
||
| To use that version, you need to pin the version of SCIP.jl to `v0.6.1` (the | ||
| last release before the rewrite): | ||
|
|
||
| pkg> add SCIP@v0.6.1 | ||
| pkg> pin SCIP | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,3 +1,2 @@ | ||
| julia 0.7 | ||
| BinDeps | ||
| MathProgBase 0.5 0.8 | ||
| julia 1.0 | ||
| MathOptInterface 0.8 |
This file was deleted.
Oops, something went wrong.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,54 +1,41 @@ | ||
| using BinDeps | ||
|
|
||
| using Libdl | ||
|
|
||
| include("csip_version.jl") | ||
|
|
||
| CSIP_URL = "https://github.com/SCIP-Interfaces/CSIP/archive/v$(CSIP_VERSION).zip" | ||
| CSIP_LIB = "libcsip" | ||
| CSIP_UNPACKED = "CSIP-$(CSIP_VERSION)" | ||
|
|
||
| @BinDeps.setup | ||
|
|
||
| @assert haskey(ENV, "SCIPOPTDIR") "Environment variable `SCIPOPTDIR` not set!" | ||
|
|
||
| function validate_csip(name, handle) | ||
| csip_version = ccall(Libdl.dlsym(handle, :CSIPgetVersion), Cint, ()) | ||
| csip_version == csip_required_int | ||
| depsfile = joinpath(dirname(@__FILE__), "deps.jl") | ||
| if isfile(depsfile) | ||
| rm(depsfile) | ||
| end | ||
|
|
||
| csipdep = library_dependency(CSIP_LIB, validate=validate_csip) | ||
|
|
||
| provides(Sources, Dict(URI(CSIP_URL) => csipdep), | ||
| unpacked_dir=CSIP_UNPACKED) | ||
|
|
||
| src_dir = joinpath(BinDeps.srcdir(csipdep), CSIP_UNPACKED) | ||
| scipopt_dir = ENV["SCIPOPTDIR"] | ||
|
|
||
| provides(SimpleBuild, | ||
| (@build_steps begin | ||
| GetSources(csipdep) | ||
| @build_steps begin | ||
| ChangeDirectory(joinpath(BinDeps.srcdir(csipdep), CSIP_UNPACKED)) | ||
| `make` | ||
| `gcc -std=c99 -Wall -pedantic -I$(src_dir)/lib/include -I$(src_dir)/include -c $(src_dir)/src/csip.c -L$(src_dir)/lib -Wl,-rpath,$(scipopt_dir)/lib/ $(scipopt_dir)/lib/libscipopt.dylib -fPIC -o $(src_dir)/src/csip.o` | ||
| ` gcc -std=c99 -Wall -pedantic $(src_dir)/src/csip.o -L$(src_dir)/lib -Wl,-rpath,$(scipopt_dir)/lib/ $(scipopt_dir)/lib/libscipopt.dylib -fPIC -shared -dynamiclib -o $(src_dir)/lib/libcsip.dylib` | ||
| `mkdir -p $(libdir(csipdep))` | ||
| `install lib/libcsip.dylib $(libdir(csipdep))` | ||
| end | ||
| end), csipdep, os = :Darwin) | ||
| function write_depsfile(path) | ||
| f = open(depsfile, "w") | ||
| println(f, "const libscip = \"$path\"") | ||
| close(f) | ||
| end | ||
|
|
||
| libname = "libscip.so" | ||
| paths_to_try = [] | ||
|
|
||
| provides(SimpleBuild, | ||
| (@build_steps begin | ||
| GetSources(csipdep) | ||
| @build_steps begin | ||
| ChangeDirectory(joinpath(BinDeps.srcdir(csipdep), CSIP_UNPACKED)) | ||
| `make` | ||
| `mkdir -p $(libdir(csipdep))` | ||
| `install lib/libcsip.so $(libdir(csipdep))` | ||
| end | ||
| end), csipdep, os = :Unix) | ||
| # prefer environment variable | ||
| if haskey(ENV, "SCIPOPTDIR") | ||
| if Sys.islinux() | ||
| push!(paths_to_try, joinpath(ENV["SCIPOPTDIR"], "lib", libname)) | ||
| end | ||
| end | ||
|
|
||
| # but also try library path | ||
| push!(paths_to_try, libname) | ||
|
|
||
| found = false | ||
| for l in paths_to_try | ||
| d = Libdl.dlopen_e(l) | ||
| if d != C_NULL | ||
| global found = true | ||
| write_depsfile(l) | ||
| break | ||
| end | ||
| end | ||
|
|
||
| @BinDeps.install Dict(:libcsip => :libcsip) | ||
| if !found && !haskey(ENV, "SCIP_JL_SKIP_LIB_CHECK") | ||
| error("Unable to locate SCIP installation. " * | ||
| "Note that this must be downloaded separately from scip.zib.de. " * | ||
| "Please set the environment variable SCIPOPTDIR to SCIP's installation path.") | ||
| end |
This file was deleted.
Oops, something went wrong.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,31 @@ | ||
| using Clang | ||
|
|
||
| HEADER_BASE = "/usr/include" # using system-wide installation of SCIP | ||
| all_headers = readdir(joinpath(HEADER_BASE, "scip")) | ||
| scip_headers = vcat( | ||
| filter(h -> startswith(h, "type_"), all_headers), | ||
| filter(h -> startswith(h, "pub_"), all_headers), | ||
| filter(h -> startswith(h, "scip_"), all_headers), | ||
| "scipdefplugins.h", | ||
| filter(h -> startswith(h, "cons_"), all_headers), | ||
| ) | ||
| lpi_headers = ["type_lpi.h"] | ||
| nlpi_headers = ["type_expr.h", "type_nlpi.h"] | ||
|
|
||
| headers = vcat( | ||
| [joinpath(HEADER_BASE, "scip", h) for h in scip_headers], | ||
| [joinpath(HEADER_BASE, "lpi", h) for h in lpi_headers], | ||
| [joinpath(HEADER_BASE, "nlpi", h) for h in nlpi_headers], | ||
| ) | ||
|
|
||
| context = Clang.init( | ||
| headers=headers, | ||
| common_file="commons.jl", | ||
| output_dir="../src/wrapper", | ||
| clang_includes=vcat(HEADER_BASE, LLVM_INCLUDE), | ||
| clang_args = ["-I", HEADER_BASE], | ||
| clang_diagnostics=true, | ||
| header_wrapped=(header, cursorname) -> header == cursorname, | ||
| header_library=header_name -> "libscip" | ||
| ) | ||
| Clang.run(context) |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.