-
Notifications
You must be signed in to change notification settings - Fork 8
🦈 IMP: LLVM 20, Minor Assembly Optimizations, MantaRay 2, Python Bindings #45
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
Merged
Changes from all commits
Commits
Show all changes
184 commits
Select commit
Hold shift + click to select a range
d206e0f
Fix major compilation errors and warnings.
TheBlackPlague 3b39043
Clean up code in Terminal module.
TheBlackPlague cd23302
Clean up code in Engine module.
TheBlackPlague c9de8b3
Clean up code in Backend module.
TheBlackPlague 1c4df92
More general cleanup.
TheBlackPlague b9c4897
Correct compiler requirement since C++23 features are being used.
TheBlackPlague 3d799ec
Project code design changes & include sorting.
TheBlackPlague 7126550
Fix empty char compilation issue.
TheBlackPlague 1bc890b
Configure texting on Linux through remote VM.
TheBlackPlague a066b1c
Remote changes and code style changes.
TheBlackPlague 24cec3b
Update MantaRay version.
TheBlackPlague a27f3c8
IDE changes.
TheBlackPlague 10d3261
Certain code & code style changes to improve QOL.
TheBlackPlague 48e4a80
Begin work on Python API Bindings.
TheBlackPlague 8cc8352
Code reformatting.
TheBlackPlague c7774bc
Use CPM for Thread Pool.
TheBlackPlague 4a4f454
Code style changes.
TheBlackPlague 37644b6
Use BS::thread_pool with priority for PERFT.
TheBlackPlague 67ddf98
Remove misleading concurrency setting method.
TheBlackPlague dfcaec0
More aggressive parallelization.
TheBlackPlague 48c2904
Remove dependency on BS::thread_pool.
TheBlackPlague 892e47c
Use default block size.
TheBlackPlague 9a4a7d7
Configure thread pool resizing.
TheBlackPlague 5515868
Style constraints matching.
TheBlackPlague 812ce2a
Change ThreadPool::Size -> ThreadPool::Count in Python Bindings.
TheBlackPlague 44a68f4
Add Transposition Table and API Spec support.
TheBlackPlague 892c520
Add string representation for movelist in Python Bindings.
TheBlackPlague a5e99b3
Code formatting change.
TheBlackPlague f0068c5
Use custom fork for nanothread to accomodate cross-platform builds.
TheBlackPlague 14db1b9
Begin work on pyproject.toml.
TheBlackPlague d1a0794
Configure GitHub actions and use more CMAKE options.
TheBlackPlague 19c8255
Fix actions.
TheBlackPlague 6f9d84d
Use v4 of upload-artifact.
TheBlackPlague ee9720b
Try without libncurses5 on Linux.
TheBlackPlague d9103ff
Don't build natively on CI either.
TheBlackPlague 2e86732
Try new LLVM path for MacOS.
TheBlackPlague 7ef523a
MacOS clang no longer supports x86-64-v2/v3/v4 as targets.
TheBlackPlague 677b35c
Disable x86-x64 for macOS in general. Fallback to m1/m2 architecture.
TheBlackPlague ca3d27e
Oops. Wrong architecture name.
TheBlackPlague 1bb944e
Don't specify target anymore for macOS. Defaults to arm64.
TheBlackPlague 42f4e82
Import mutex too (might be necessary for macOS targets).
TheBlackPlague 1e6fd28
Extend base native flags to nanothread.
TheBlackPlague 0d1963d
Try support apple-m3.
TheBlackPlague e08eda3
Try support apple-m4.
TheBlackPlague 0318f86
Ignore Python Wheel distribution building.
TheBlackPlague cb42767
Also ignore .venv (for virtual environments).
TheBlackPlague 832651e
Change workflow name to executable for future py_bindings.yml workflow.
TheBlackPlague 99a6e13
Implement a Python Binding Wheel Building workflow.
TheBlackPlague db425fb
Allow usage of scikit-build-score v0.10.
TheBlackPlague ca535bc
Use license file instead.
TheBlackPlague 094d775
Use manual building.
TheBlackPlague 2df504c
Enable Position Independent Code for Linux.
TheBlackPlague 7a3af2d
Change name of artifact for wheels.
TheBlackPlague ad6676f
Fix typo.
TheBlackPlague 3ce053a
Add architecture to wheels building too.
TheBlackPlague f98552e
Fix CMAKE_CXX_FLAGS not being set properly.
TheBlackPlague ea81f9d
If none are provided, only then use the environment variables.
TheBlackPlague 3515eb7
Try having better artifact names for python wheels.
TheBlackPlague 8820c80
Oops. Forgot the .whl extension.
TheBlackPlague fddac21
Correct duty of search handler.
TheBlackPlague 03f6508
Implement the TimeData, TimeControl, and TimeManager classes.
TheBlackPlague 5571a5c
Implement RepetitionHistory and PrincipleVariationTable.
TheBlackPlague a9b57fe
Implement SearchHandler.
TheBlackPlague 12ea58c
Implement base Search API.
TheBlackPlague 1f150d9
Add documentation for Search & SearchHandler.
TheBlackPlague dd70eaf
Fix binding API inconsistencies.
TheBlackPlague c3edadd
Add a wait method to search to allow waiting for completion.
TheBlackPlague 9930012
Unfortunately, waiting for the search to finish causes Python to neve…
TheBlackPlague 2d6cf00
Publish via actions to PyPi.
TheBlackPlague c0ba0ba
Merge into PyBinding.
TheBlackPlague 4e3d774
Try renaming the wheels before upload as well.
TheBlackPlague cab25af
Try adding architecture information while staying PEP compliant.
TheBlackPlague f118a34
Fix versioning script.
TheBlackPlague cfb0590
Fix some unfortunate syntax errors.
TheBlackPlague 9c9519a
Fix environment variables not being set properly on Windows.
TheBlackPlague c398e7e
Oops. Forgot to change != -> ==.
TheBlackPlague 6368f93
Change version to use the post flag since the other one breaks for PyPi.
TheBlackPlague d9ddc4d
Switch to - instead of post.
TheBlackPlague 64d8b69
Use dev version for wheel architecture.
TheBlackPlague 3e85d63
Repair the wheel and get manylinux tag.
TheBlackPlague 9943c27
Also show the wheel for ManyLinux.
TheBlackPlague 5c1fb44
Opt for Gemfury registry instead.
TheBlackPlague 760090c
Use better versioning now that we aren't held back by PyPI.
TheBlackPlague 180c333
Update the Python Package Repository URL.
TheBlackPlague 48842e3
Try adding C++ STL version to the wheel names.
TheBlackPlague 8c7831e
Fix missing string ending.
TheBlackPlague b32696c
Bash can't tell difference between variable and commands it seems.
TheBlackPlague 6c3378d
Am I really forgetting bash syntax? :O
TheBlackPlague 52db9d9
I'm an idiot.
TheBlackPlague 4d1193c
Fix clang not defining STL headers by default.
TheBlackPlague e7102ce
Try another approach.
TheBlackPlague 6b1b1c5
Fix escaping.
TheBlackPlague d8831cd
Simplify logic for CXX version extraction on unix-like systems.
TheBlackPlague 2735971
Fix file parsing.
TheBlackPlague 9271c00
Use getconf on Linux and clang++ version on macos.
TheBlackPlague c3791b2
Try enabling wheel publishing to test.
TheBlackPlague 89db8aa
Workflow run conditions:
TheBlackPlague d8ce529
Homebrew being inconsistent with LLVM installs is annoying.
TheBlackPlague 0662a4d
Use LLVM 20 for macOS.
TheBlackPlague 6ad0f26
Homebrew being retarded.
TheBlackPlague 99cef31
My god, stop Homebrew.
TheBlackPlague b38e677
Try resetting repository state on workers.
TheBlackPlague a751288
Add a code-review workflow.
TheBlackPlague e9afc5f
Give it permission to read issues and pull-requests.
TheBlackPlague bc10ed1
Use workflow dispatch instead.
TheBlackPlague 45dc348
Try to make the workflow at least show up.
TheBlackPlague 83f643d
Allow 0 fetch depth.
TheBlackPlague 489a263
Give write permissions.
TheBlackPlague 03edfd5
Use pull-requests: write.
TheBlackPlague 9843c8b
AI Code Review sucks.
TheBlackPlague b9cc18e
An API-spec / engine version change should be required for rebuilding.
TheBlackPlague 280a083
Make the API spec more pythonic.
TheBlackPlague 78c5c39
Make constants immutable by using constant holder static readonly pro…
TheBlackPlague 1da638b
It should be "the StockDory Authors".
TheBlackPlague 3f616e8
Rearrange placement of constant variables.
TheBlackPlague 5b9bafd
Simplify castling logic.
TheBlackPlague dc6d982
The RookCastleSquareStart & RookCastleSquareEnd arrays are only used …
TheBlackPlague 174865b
Fix formatting issue.
TheBlackPlague 05d1720
Remove unused util class.
TheBlackPlague d64921f
Remove unnecessary include.
TheBlackPlague 2640429
Fix python bindings.
TheBlackPlague 05288e4
Enable compile launch property when not building a Python Module.
TheBlackPlague 19f7e93
Correct order.
TheBlackPlague 77430ee
Fix ordering for other types too.
TheBlackPlague 6ddc48c
Clear the transposition table between searches since we're doing rand…
TheBlackPlague 34f980c
Make bench more accurate by warming up first for 4 iterations.
TheBlackPlague 8d3df12
IDE Files.
TheBlackPlague cb17c32
No longer use exception as logic flow.
TheBlackPlague 80fe322
Refactor TranspositionTable (Backend -> Engine). This better matches …
TheBlackPlague 3315c44
Fix possible Out-of-Bounds UB.
TheBlackPlague 88763b8
Formatting change.
TheBlackPlague 7db4d8d
Cleanup bench hash function:
TheBlackPlague 5a7fb5a
Update Makefile.
TheBlackPlague e0d8307
Missed a change.
TheBlackPlague 07b7ed7
This change may potentially be elo-losing.
TheBlackPlague 4254575
Fix TC bug introduced in search stop logic being refactored to not us…
TheBlackPlague 61460ec
Force linker to be LLD.
TheBlackPlague d89e03f
This change is still somehow elo-losing. More work needs to be done t…
TheBlackPlague 0397818
Nevermind. Linux isn't retarded. This works.
TheBlackPlague 756416a
One more time...
TheBlackPlague b9fde63
Fuck this, exception as logic is fine!
TheBlackPlague 3ce6015
Try to replace exceptions with std::setjmp and std::longjmp.
TheBlackPlague 16a2ff0
Formatting change.
TheBlackPlague 11d3bed
These do not need to be std calls.
TheBlackPlague cd8bb58
Update thread pool to RAII standards.
TheBlackPlague a0e9ba0
Rearrange UCI Output and remove TT Nodes from being logged to UCI Out…
TheBlackPlague 7e7e7e3
"from" is reserved in Python.
TheBlackPlague e9b3796
Ignore build directory.
TheBlackPlague f556508
Fix some IDE files.
TheBlackPlague 11a2f7e
New Makefile.
TheBlackPlague 153ca92
Jump into QSearch after necessary stop/draw checks. Mate pruning shou…
TheBlackPlague 58aa992
Maybe PV Table is causing some issues with this.
TheBlackPlague 9b0a52d
Code style changes.
TheBlackPlague 0db88b8
Try another attempt at no exceptions.
TheBlackPlague 61d0c9c
Quite possible TT and History get corrupted without sudden stops.
TheBlackPlague f8d14e0
Code style changes.
TheBlackPlague b228bba
Code style changes.
TheBlackPlague b670f22
Fix possible thread pool leak.
TheBlackPlague 251d436
Slight refactoring of how TT Entries (now called states) are handled.
TheBlackPlague e5241b9
Use MantaRay v2.
TheBlackPlague 24fd557
Correct argument is OPTIONS.
TheBlackPlague 8ed2fa8
Fix some compile issues.
TheBlackPlague 510b5b3
Network conversion should happen in the trainer.
TheBlackPlague 64f7576
Avoid default initialization of OrderedMoveList.
TheBlackPlague 4313dd2
Compiler is better than us for most inlining handling.
TheBlackPlague 208cf01
Fix illegal leaf PV when PV is overwritten by another branch.
TheBlackPlague 44e75c3
Rename NoHandle -> DefaultHandler
TheBlackPlague b49b4d3
Python Module directories.
TheBlackPlague 239d152
Fix python binding related issues.
TheBlackPlague 268e2dd
Upgrade to actions/checkout v4.
TheBlackPlague ef9bb49
Slight changes in what gets embedded in binary.
TheBlackPlague 2010bb9
Should use v4 here too.
TheBlackPlague 1a8aa85
Prevent use of internal thread pool. Everything should use C++ encaps…
TheBlackPlague 5c51d58
There is no "this" to capture.
TheBlackPlague 947faf6
Update CMake Minimum to 3.21.
TheBlackPlague d288ba6
Merge remote-tracking branch 'origin/cpp23-clang20' into cpp23-clang20
TheBlackPlague 9ce1142
Update Makefile for macOS.
TheBlackPlague 526c56a
Pin to MantaRay Commit for Testing Purposes.
TheBlackPlague 1eb3694
Try a newer ver. of MantaRay.
TheBlackPlague e095c1b
Revert to older version logic as newer caused performance regression.
TheBlackPlague d41961c
Try MantaRay with better inlining support.
TheBlackPlague 5fd71c3
Update MantaRay.
TheBlackPlague fb54688
Update MantaRay.
TheBlackPlague 10672e2
Update README.
TheBlackPlague 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
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,236 @@ | ||
| name: PyBinding | ||
|
|
||
| on: | ||
| push: | ||
| branches: [ "master" ] | ||
| paths: | ||
| - pyproject.toml | ||
| - CMakeLists.txt | ||
| pull_request: | ||
| branches: [ "master" ] | ||
| paths: | ||
| - pyproject.toml | ||
| - CMakeLists.txt | ||
|
|
||
| jobs: | ||
| build: | ||
| strategy: | ||
| matrix: | ||
| arch: [ x86-64, x86-64-v2, x86-64-v3, x86-64-v4, apple-m1, apple-m2, apple-m3, apple-m4 ] | ||
| os: [ ubuntu-latest , windows-latest, macos-latest ] | ||
| python: [ "3.8", "3.9", "3.10", "3.11", "3.12", "3.13" ] | ||
| exclude: | ||
| - os: windows-latest | ||
| arch: apple-m1 | ||
| - os: windows-latest | ||
| arch: apple-m2 | ||
| - os: windows-latest | ||
| arch: apple-m3 | ||
| - os: windows-latest | ||
| arch: apple-m4 | ||
| - os: ubuntu-latest | ||
| arch: apple-m1 | ||
| - os: ubuntu-latest | ||
| arch: apple-m2 | ||
| - os: ubuntu-latest | ||
| arch: apple-m3 | ||
| - os: ubuntu-latest | ||
| arch: apple-m4 | ||
| - os: macos-latest | ||
| arch: x86-64 | ||
| - os: macos-latest | ||
| arch: x86-64-v2 | ||
| - os: macos-latest | ||
| arch: x86-64-v3 | ||
| - os: macos-latest | ||
| arch: x86-64-v4 | ||
|
|
||
| runs-on: ${{ matrix.os }} | ||
|
|
||
| steps: | ||
| - uses: actions/checkout@v4 | ||
|
|
||
| - if: matrix.os == 'ubuntu-latest' | ||
| name: Install Linux Dependencies | ||
| run: | | ||
| sudo apt install ninja-build | ||
| sudo apt remove python3-lldb-14 | ||
| - if: matrix.os == 'windows-latest' | ||
| name: Install Windows Dependencies | ||
| run: | | ||
| choco install ninja | ||
|
|
||
| - if: matrix.os == 'ubuntu-latest' | ||
| name: Install Clang 20 (Ubuntu) | ||
| run: | | ||
| wget https://apt.llvm.org/llvm.sh | ||
| sudo chmod +x llvm.sh | ||
| sudo ./llvm.sh 20 | ||
| sudo rm -rf llvm.sh | ||
| - if: matrix.os == 'windows-latest' | ||
| name: Install Clang 20 (Windows) | ||
| run: | | ||
| choco install llvm --version 20.1.0 -y | ||
| - if: matrix.os == 'macos-latest' | ||
| name: Install Clang 20 (MacOS) | ||
| run: | | ||
| brew update-reset | ||
| brew update | ||
| brew install llvm@20 | ||
|
|
||
| - if: matrix.os == 'ubuntu-latest' | ||
| name: Set CC and CXX for Linux | ||
| run: | | ||
| echo "CC=clang-20" >> $GITHUB_ENV | ||
| echo "CXX=clang++-20" >> $GITHUB_ENV | ||
| - if: matrix.os == 'windows-latest' | ||
| name: Set CC and CXX for Windows | ||
| shell: powershell | ||
| run: | | ||
| echo "CC=clang" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append | ||
| echo "CXX=clang++" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append | ||
| - if: matrix.os == 'macos-latest' | ||
| name: Set CC and CXX for MacOS | ||
| run: | | ||
| echo "CC=/opt/homebrew/opt/llvm@20/bin/clang" >> $GITHUB_ENV | ||
| echo "CXX=/opt/homebrew/opt/llvm@20/bin/clang++" >> $GITHUB_ENV | ||
| echo "PATH=/opt/homebrew/opt/llvm@20/bin:$PATH" >> $GITHUB_ENV | ||
|
|
||
|
|
||
| - name: Setup Python ${{ matrix.python }} | ||
| uses: actions/setup-python@v5 | ||
| with: | ||
| python-version: ${{ matrix.python }} | ||
|
|
||
| - name: Python Dependencies | ||
| run: | | ||
| python -m pip install --upgrade pip | ||
| python -m pip install scikit-build-core build twine pybind11 setuptools build tomlkit | ||
|
|
||
| - name: CMake Arguments (MacOS) | ||
| if: matrix.os == 'macos-latest' | ||
| run: | | ||
| echo "CMAKE_CXX_FLAGS=-mcpu=${{ matrix.arch }}" >> $GITHUB_ENV | ||
|
|
||
| - name: CMake Arguments (Linux) | ||
| if: matrix.os == 'ubuntu-latest' | ||
| run: | | ||
| echo "CMAKE_CXX_FLAGS=-march=${{ matrix.arch }}" >> $GITHUB_ENV | ||
|
|
||
| - name: CMake Arguments (Windows) | ||
| if: matrix.os == 'windows-latest' | ||
| shell: powershell | ||
| run: | | ||
| echo "CMAKE_CXX_FLAGS=-march=${{ matrix.arch }}" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append | ||
|
|
||
| - name: Set architecture environment variable (Windows) | ||
| if: matrix.os == 'windows-latest' | ||
| run: | | ||
| echo "ARCHITECTURE=${{ matrix.arch }}" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append | ||
|
|
||
| - name: Set architecture environment variable (Linux & MacOS) | ||
| if: matrix.os != 'windows-latest' | ||
| run: | | ||
| echo "ARCHITECTURE=${{ matrix.arch }}" >> $GITHUB_ENV | ||
|
|
||
| - name: Extract C++ Standard Library Version (Windows) | ||
| if: matrix.os == 'windows-latest' | ||
| shell: powershell | ||
| run: | | ||
| echo "Detecting STL version using $env:CXX" | ||
|
|
||
| $cxx_version = & $env:CXX -dM -E -x c++ NUL 2>$null | Select-String '_MSC_VER' | ForEach-Object { | ||
| if ($_ -match '_MSC_VER\s+(\d+)') { | ||
| "msvc$($matches[1])" | ||
| } | ||
| } | ||
|
|
||
| echo "CXX_VERSION=$cxx_version" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append | ||
|
|
||
| - name: Extract C++ Standard Library Version (Linux & MacOS) | ||
| if: matrix.os != 'windows-latest' | ||
| shell: bash | ||
| run: | | ||
| echo "Detecting STL version on ${{ matrix.os }}" | ||
|
|
||
| if [[ "${{ matrix.os }}" == "ubuntu-latest" ]]; then | ||
| glibc_version=$(getconf GNU_LIBC_VERSION | awk '{print $2}') | ||
| STL_VERSION="libstdcxx${glibc_version}" | ||
| elif [[ "${{ matrix.os }}" == "macos-latest" ]]; then | ||
| clang_version=$(clang++ --version | grep -i 'clang version' | awk '{print $4}') | ||
| STL_VERSION="libcxx${clang_version}" | ||
| else | ||
| STL_VERSION="unknown" | ||
| fi | ||
|
|
||
| echo "Detected STL version: $STL_VERSION" | ||
| echo "CXX_VERSION=$STL_VERSION" >> $GITHUB_ENV | ||
|
|
||
| - name: Define version | ||
| shell: python | ||
| run: | | ||
| import os | ||
| import tomlkit | ||
|
|
||
| architecture = os.environ.get("ARCHITECTURE", "").replace("-", "_") | ||
| cxx_version = os.environ.get("CXX_VERSION", "") | ||
|
|
||
| with open("pyproject.toml", "r", encoding="utf-8") as f: | ||
| doc = tomlkit.parse(f.read()) | ||
|
|
||
| doc["project"]["version"] = f"{doc['project']['version']}.arch.{architecture}.{cxx_version}" | ||
|
|
||
| with open("pyproject.toml", "w", encoding="utf-8") as f: | ||
| f.write(tomlkit.dumps(doc)) | ||
|
|
||
| print(f"Set project version to {doc['project']['version']}") | ||
|
|
||
| - name: Build Wheel | ||
| run: | | ||
| python -m build | ||
|
|
||
| - name: Upload Wheel | ||
| uses: actions/upload-artifact@v4 | ||
| with: | ||
| name: StockDory-python.${{ matrix.python }}-${{ matrix.os }}-${{ matrix.arch }}.whl | ||
| path: ./dist/*.whl | ||
|
|
||
| publish: | ||
| if: github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags/') | ||
| needs: build | ||
| runs-on: ubuntu-latest | ||
|
|
||
| environment: | ||
| name: Python Packages Repository | ||
| url: https://pypi.fury.io/theblackplague/stockdory | ||
|
|
||
| steps: | ||
| - name: Download Wheels | ||
| uses: actions/download-artifact@v4 | ||
| with: | ||
| path: dist | ||
| merge-multiple: true | ||
|
|
||
| - name: Setup Python | ||
| uses: actions/setup-python@v5 | ||
| with: | ||
| python-version: 3.x | ||
|
|
||
| - name: Python Dependencies | ||
| run: | | ||
| python -m pip install --upgrade twine | ||
|
|
||
| - name: Show downloaded Wheels | ||
| run: ls -R dist | ||
|
|
||
| - name: Publish Wheels (Gemfury) | ||
| env: | ||
| FURY_TOKEN: ${{ secrets.FURY_TOKEN }} | ||
| run: | | ||
| python -m twine upload \ | ||
| --repository-url https://pypi.fury.io/theblackplague/ \ | ||
| -u theblackplague \ | ||
| -p "${FURY_TOKEN}" \ | ||
| --non-interactive \ | ||
| --skip-existing \ | ||
| dist/* | ||
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
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
Oops, something went wrong.
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.