-
Notifications
You must be signed in to change notification settings - Fork 212
[WIP] QDET demo #1327
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
Open
soranjh
wants to merge
91
commits into
master
Choose a base branch
from
qdet_demo
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
[WIP] QDET demo #1327
Changes from 8 commits
Commits
Show all changes
91 commits
Select commit
Hold shift + click to select a range
a76b064
add intro
soranjh 72f5c15
add body
soranjh 5d88aaf
Adressed the comments
ddhawan11 85a3b23
Added conclusions
ddhawan11 28b8c19
Fixed a definition
ddhawan11 89dc812
Merge branch 'master' into qdet_demo
soranjh 3a73910
git status
soranjh 419fa62
Merge branch 'qdet_demo' of https://github.com/PennyLaneAI/qml into q…
soranjh 90d95a7
add metadata
soranjh 4d5caea
disable code
soranjh c7ce50d
fix format
soranjh f08c4ba
fix format
soranjh e336aac
fix math
soranjh 4dcbdeb
Update demonstrations/tutorial_qdet_embedding.py
ddhawan11 1613232
Update demonstrations/tutorial_qdet_embedding.py
ddhawan11 e8c6d1d
Update demonstrations/tutorial_qdet_embedding.py
ddhawan11 c5ff142
Update demonstrations/tutorial_qdet_embedding.py
ddhawan11 906bb1a
Update demonstrations/tutorial_qdet_embedding.py
ddhawan11 4535791
Update demonstrations/tutorial_qdet_embedding.py
ddhawan11 bf9510e
Update demonstrations/tutorial_qdet_embedding.py
ddhawan11 9ac57d6
Update demonstrations/tutorial_qdet_embedding.py
ddhawan11 f8bf9c1
Update demonstrations/tutorial_qdet_embedding.py
ddhawan11 b42e5c3
Update demonstrations/tutorial_qdet_embedding.py
ddhawan11 09a667a
Addressed comments
ddhawan11 35a9252
Updated references
ddhawan11 c265bc2
Merge branch 'master' into qdet_demo
ddhawan11 ad24ae8
Fixed rendering issue
ddhawan11 62b39fc
Fixed rendering
ddhawan11 235eabc
Fixed metadata file
ddhawan11 3f55f6a
updated metadata file
ddhawan11 b450a8f
fixing metadata
ddhawan11 3a1bb7d
Update demonstrations/tutorial_qdet_embedding.py
ddhawan11 1e11481
Update demonstrations/tutorial_qdet_embedding.py
ddhawan11 8e17edc
Update demonstrations/tutorial_qdet_embedding.py
ddhawan11 cf6ea83
Update demonstrations/tutorial_qdet_embedding.py
ddhawan11 bd9d75d
Update demonstrations/tutorial_qdet_embedding.py
ddhawan11 c815f83
Update demonstrations/tutorial_qdet_embedding.py
ddhawan11 50cc18d
Update demonstrations/tutorial_qdet_embedding.py
ddhawan11 2797710
Update demonstrations/tutorial_qdet_embedding.py
ddhawan11 d284e67
Update demonstrations/tutorial_qdet_embedding.py
ddhawan11 45761aa
Update demonstrations/tutorial_qdet_embedding.py
ddhawan11 c253095
Update demonstrations/tutorial_qdet_embedding.py
ddhawan11 06d2c9d
Update demonstrations/tutorial_qdet_embedding.py
ddhawan11 1ec48a4
Update demonstrations/tutorial_qdet_embedding.py
ddhawan11 61248d3
Update demonstrations/tutorial_qdet_embedding.py
ddhawan11 325b8d9
Update demonstrations/tutorial_qdet_embedding.py
ddhawan11 8611fc5
Update demonstrations/tutorial_qdet_embedding.py
ddhawan11 8e0a329
Update demonstrations/tutorial_qdet_embedding.py
ddhawan11 5f03f8a
Update demonstrations/tutorial_qdet_embedding.py
ddhawan11 1944b4b
Addressed comments
ddhawan11 0e63e8f
Merge branch 'master' into qdet_demo
ddhawan11 79c0682
Addressed some comments
ddhawan11 85a4a7f
Fixed some errors
ddhawan11 f3eb553
Testing rendering
ddhawan11 fc9f82c
Added plot
ddhawan11 bb5300a
Added plot
ddhawan11 651d0d7
Addressed all comments
ddhawan11 8513fb7
Merge branch 'master' into qdet_demo
soranjh e715a9e
update text
soranjh 4d37287
update text
soranjh d8aca40
Added image
ddhawan11 22aa8b1
add image and update text
soranjh 09b3229
update implementation
soranjh 75e8069
update refs
soranjh 8c9ae12
update refs
soranjh d3e42a1
format comments
soranjh b413b3f
Merge branch 'master' into qdet_demo
soranjh 09330a9
update format
soranjh 4180612
update equation
soranjh 463f862
Update demonstrations/tutorial_qdet_embedding.py
ddhawan11 4c334dd
Merge branch 'master' into qdet_demo
ddhawan11 a021fcd
Update demonstrations/tutorial_qdet_embedding.py
ddhawan11 e0c7464
Update demonstrations/tutorial_qdet_embedding.py
ddhawan11 5adff53
Update demonstrations/tutorial_qdet_embedding.py
ddhawan11 1f7988b
Update demonstrations/tutorial_qdet_embedding.py
ddhawan11 7d591cf
Update demonstrations/tutorial_qdet_embedding.py
ddhawan11 7ec48c7
Update demonstrations/tutorial_qdet_embedding.py
ddhawan11 ecf5a81
Update demonstrations/tutorial_qdet_embedding.py
ddhawan11 412c9ce
Update demonstrations/tutorial_qdet_embedding.py
ddhawan11 1d256d0
Update demonstrations/tutorial_qdet_embedding.py
ddhawan11 3ff97ad
Update demonstrations/tutorial_qdet_embedding.py
ddhawan11 5771176
Update demonstrations/tutorial_qdet_embedding.py
ddhawan11 da663ba
Update demonstrations/tutorial_qdet_embedding.py
ddhawan11 3770219
Update demonstrations/tutorial_qdet_embedding.py
ddhawan11 c291233
Addressed comments
ddhawan11 1ab2fdd
Merge branch 'master' into qdet_demo
ddhawan11 c2a43e0
Addressed all comments
ddhawan11 96846b6
Merge branch 'master' into qdet_demo
ddhawan11 b0a1542
Added thumbnails
ddhawan11 754c16b
Fixed build issue
ddhawan11 071bb0e
fixed rendering
ddhawan11 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,254 @@ | ||
r"""Quantum Defect Embedding Theory (QDET) | ||
========================================= | ||
Efficient simulation of complex quantum systems remains a significant challenge in chemistry and | ||
physics. These simulations often require computationally intractable methods for a complete | ||
solution. However, many interesting problems in quantum chemistry and condensed matter physics | ||
feature a strongly correlated region, which requires accurate quantum treatment, embedded within a | ||
larger environment that could be properly treated with cheaper approximations. Examples of such | ||
ddhawan11 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
systems include point defects in materials [#Galli]_, active site of catalysts [#SJRLee]_, surface phenomenon such | ||
ddhawan11 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
as adsorption [#Gagliardi]_ and many more. Embedding theories serve as powerful tools for effectively | ||
ddhawan11 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
addressing such problems. | ||
ddhawan11 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
The core idea behind embedding methods is to partition the system and treat the strongly correlated | ||
subsystem accurately, using high-level quantum mechanical methods, while approximating the effects | ||
ddhawan11 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
of the surrounding environment in a way that retains computational efficiency. In this demo, we show | ||
ddhawan11 marked this conversation as resolved.
Show resolved
Hide resolved
ddhawan11 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
how to implement the quantum defect embedding theory (QDET). The method has been successfully | ||
ddhawan11 marked this conversation as resolved.
Show resolved
Hide resolved
ddhawan11 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
applied to study defects in CaO and to calculate excitations of the negatively charged NV center in diamond. | ||
ddhawan11 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
An important advantage of QDET is its compatibility with quantum | ||
algorithms as we explain in the following sections. The method can be implemented for calculating | ||
ddhawan11 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
a variety of ground state, excited state and dynamic properties of materials. These make QDET a | ||
ddhawan11 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
powerful method for affordable quantum simulation of materials. | ||
|
||
.. figure:: ../_static/demo_thumbnails/opengraph_demo_thumbnails/OGthumbnail_how_to_build_spin_hamiltonians.png | ||
:align: center | ||
:width: 70% | ||
:target: javascript:void(0) | ||
""" | ||
|
||
###################################################################### | ||
# Theory | ||
# ------ | ||
# The core idea in QDET is to construct an effective Hamiltonian that describes the impurity | ||
ddhawan11 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
# subsystem and also accounts for the interactions between the impurity subsystem and the | ||
ddhawan11 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
# environment as | ||
ddhawan11 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
# | ||
# .. math:: | ||
# | ||
# H^{eff} = \sum_{ij}^{A} t_{ij}^{eff}a_i^{\dagger}a_j + \frac{1}{2}\sum_{ijkl}^{A} v_{ijkl}^{eff}a_i^{\dagger}a_{j}^{\dagger}a_ka_l, | ||
ddhawan11 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
# | ||
# where :math:`t_{ij}^{eff}` and :math:`v_{ijkl}^{eff}` represent the effective one-body and | ||
# two-body integrals, respectively, and :math:`ijkl` span over the orbitals inside the impurity. | ||
# This Hamiltonian describes a simplified representations of the complex quantum systems that is | ||
ddhawan11 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
# computationally tractable and properly captures the essential physics of the problem. The | ||
# effective integrals :math:`t, v` can be obtained by fitting experimental results or may be | ||
ddhawan11 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
# derived from first-principles calculations []. | ||
ddhawan11 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
# | ||
# A QDET calculation typically starts by obtaining a meanfield approximation of the whole system | ||
ddhawan11 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
# using efficient quantum chemistry methods such as density functional theory. These calculations | ||
ddhawan11 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
# provide a set of orbitals which can be split into impurity and bath orbitals. These orbitals are | ||
ddhawan11 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
# used to construct the effective Hamiltonian which is finally solved by using either a high level | ||
# classical method or a quantum algorithm. Let's implement these steps for an example! | ||
# | ||
ddhawan11 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
# Implementation | ||
ddhawan11 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
# -------------- | ||
# We implement QDET to compute the excitation energies of a negatively charged nitrogen-vacancy | ||
# defect in diamond []. | ||
ddhawan11 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
# | ||
# Mean field calculations | ||
# ^^^^^^^^^^^^^^^^^^^^^^^ | ||
# We use density functional theory To obtain a mean-field description of the whole system. The DFT | ||
ddhawan11 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
# calculations are performed with the QUANTUM ESPRESSO package. This requires downloading | ||
# parameters needed for each atom type in the system from the QUANTUM ESPRESSO | ||
ddhawan11 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
# `database <https://www.quantum-espresso.org/pseudopotentials/>`_. We have carbon and nitrogen in | ||
# our system which can be downloaded with | ||
|
||
wget -N -q http://www.quantum-simulation.org/potentials/sg15_oncv/upf/C_ONCV_PBE-1.2.upf | ||
wget -N -q http://www.quantum-simulation.org/potentials/sg15_oncv/upf/N_ONCV_PBE-1.2.upf | ||
|
||
############################################################################## | ||
# Next, we need to create the input file for running QUANTUM ESPRESSO. The input file ``pw.in`` | ||
ddhawan11 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
# contains information about the system and details of the DFT calculations. More details on | ||
# how to construct the input file can be found in QUANTUM ESPRESSO | ||
# `documentation <https://www.quantum-espresso.org/Doc/INPUT_PW.html>`_ page. | ||
# | ||
# We can now perform the DFT calculations by running the executable code ``pw.x`` on the input file: | ||
mpirun -n 2 pw.x -i pw.in > pw.out | ||
|
||
|
||
# Identify the impurity | ||
# ^^^^^^^^^^^^^^^^^^^^^ | ||
# Once we have obtained the meanfield description, we can identify our impurity by finding | ||
ddhawan11 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
# the states that are localized in real space. We can identify these localized states using the | ||
ddhawan11 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
# localization factor defined as []: | ||
ddhawan11 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
# | ||
# .. math:: | ||
# | ||
# L_n = \int_{V \in \ohm} d^3 r |\Psi_n^{KS}(r)|^ | ||
# | ||
# where $V$ is the identified volume including the impurity within the supercell volume $\ohm$. | ||
# We will use the WEST program to compute the localization factor. This requires creating another | ||
ddhawan11 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
# input file ``westpp.in`` as shown below. | ||
|
||
westpp_control: | ||
westpp_calculation: L # triggers the calculation of the localization factor | ||
westpp_range: # defines the range of states toe compute the localization factor | ||
- 1 # start from the first state | ||
- 176 # use all the 176 state | ||
westpp_box: # specifies the parameter of the box in atomic units for integration | ||
- 6.19 # | ||
- 10.19 | ||
- 6.28 | ||
- 10.28 | ||
- 6.28 | ||
- 10.28 | ||
|
||
############################################################################## | ||
# We can execute this calculation as | ||
|
||
mpirun -n 2 westpp.x -i westpp.in > westpp.out | ||
|
||
############################################################################## | ||
# This creates a file named ``west.westpp.save/westpp.json``. Since computational resources required | ||
ddhawan11 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
# to run the calculation are large, the WEST output file needed for the next step can be | ||
# directly downloaded as: | ||
|
||
mkdir -p west.westpp.save | ||
wget -N -q https://west-code.org/doc/training/nv_diamond_63/box_westpp.json -O west.westpp.save/westpp.json | ||
|
||
############################################################################## | ||
# We can now plot the computed localization factor for each of the states: | ||
|
||
import json | ||
import numpy as np | ||
import matplotlib.pyplot as plt | ||
|
||
with open('west.westpp.save/westpp.json','r') as f: | ||
data = json.load(f) | ||
|
||
y = np.array(data['output']['L']['K000001']['local_factor'],dtype='f8') | ||
x = np.array([i+1 for i in range(y.shape[0])]) | ||
|
||
plt.plot(x,y,'o') | ||
plt.axhline(y=0.08,linestyle='--',color='red') | ||
|
||
plt.xlabel('KS index') | ||
plt.ylabel('Localization factor') | ||
|
||
plt.show() | ||
|
||
############################################################################## | ||
# From this plot, it is easy to see that Kohn-Sham orbitals can be catergorized as orbitals | ||
ddhawan11 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
# with low and high localization factor. For the purpose of defining an impurity, we need | ||
# highly localized orbitals, so for this we set a cutoff of 0.06 and choose the orbitals | ||
ddhawan11 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
# that have a localization factor > 0.06 for our active space. We'll use these orbitals for | ||
# the calculation of the parameters for the effective Hamiltonian in the following section. | ||
# | ||
# Effective Hamiltonian | ||
# ^^^^^^^^^^^^^^^^^^^^^ | ||
# The next and probably most important steps in QDET is to define the effective one-body and | ||
# two-body integrals for the impurity. The effective two-body integrals, $v^{eff}$ are computed | ||
# first as matrix elements of the partially screened static Coulomb potential $W_0^{R}$. | ||
# $$v_{ijkl}^{eff} = [W_0^{R}]_{ijkl}$$ | ||
# $W_0^R$, results from screening the bare Coulomb potential, $v$, with the reduced polarizability, | ||
# $P_0^R = P - P_{imp}$, where $P$ is the system's polarizability and $P_{imp}$ is the impurity's | ||
# polarizability. However, this definition of the effective interaction, $v_{eff}$, introduces | ||
# double counting of electrostatic and exchange-correlation effects for the impurity: once via | ||
ddhawan11 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
# density functional theory (DFT) and again via the high-level method. | ||
# Therefore, once $v^{eff}$ is obtained, the one-body term $t^{eff}$ is then modified by subtracting | ||
# from the Kohn-Sham Hamiltonian the term accounting for electrostatic and exchange | ||
ddhawan11 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
# correlation interactions in the active space. | ||
# | ||
# $$t_{ij}^{eff} = H_{ij}^{KS} - t_{ij}^{dc}$$ | ||
# | ||
# In WEST, these parameters for the effective Hamiltonian are calculated by using the wfreq.x | ||
ddhawan11 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
# executable. The program will: (i) compute the quasiparticle energies, (ii) compute the | ||
# partially screened Coulomb potential, and (iii) finally compute the parameters of the | ||
# effective Hamiltonian. The input file for such a calculation is shown below: | ||
|
||
wstat_control: | ||
wstat_calculation: S | ||
n_pdep_eigen: 512 | ||
trev_pdep: 0.00001 | ||
|
||
wfreq_control: | ||
wfreq_calculation: XWGQH | ||
macropol_calculation: C | ||
l_enable_off_diagonal: true | ||
n_pdep_eigen_to_use: 512 | ||
qp_bands: [87, 122, 123, 126, 127, 128] | ||
n_refreq: 300 | ||
ecut_refreq: 2.0 | ||
|
||
############################################################################## | ||
# We now construct the effective Hamiltonian: | ||
|
||
from westpy.qdet import QDETResult | ||
|
||
mkdir -p west.wfreq.save | ||
wget -N -q https://west-code.org/doc/training/nv_diamond_63/wfreq.json -O west.wfreq.save/wfreq.json | ||
|
||
effective_hamiltonian = QDETResult(filename='west.wfreq.save/wfreq.json') | ||
|
||
############################################################################## | ||
# The final step is to solve for this effective Hamiltonian using a high level method. We can | ||
# use the WESTpy package as: | ||
|
||
solution = effective_hamiltonian.solve() | ||
|
||
############################################################################## | ||
# We can also use this effective Hamiltonian with a quantum algorithm through PennyLane. This | ||
# requires representing it in the qubit Hamiltonian format for PennyLane and can be done as follows: | ||
|
||
from pennylane.qchem import one_particle, two_particle, observable | ||
import numpy as np | ||
|
||
effective_hamiltonian = QDETResult(filename='west.wfreq.save/wfreq.json') | ||
|
||
one_e, two_e = effective_hamiltonian.h1e, effective_hamiltonian.eri | ||
|
||
t = one_particle(one_e[0]) | ||
v = two_particle(np.swapaxes(two_e[0][0], 1, 3)) | ||
qubit_op = observable([t, v], mapping="jordan_wigner") | ||
|
||
############################################################################## | ||
# The ground state energy of the Hamiltonian is identical to the one obtained before. | ||
ddhawan11 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
# | ||
# Conclusion | ||
ddhawan11 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
# ---------- | ||
# The quantum density embedding theory is a novel framework for simulating strongly correlated | ||
ddhawan11 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
# quantum systems and has been successfully used for studying defects in solids. Applicability of | ||
# QDET however is not limited to defects, it can be used for other systems where a strongly | ||
# correlated subsystem is embedded in a weakly correlated environment. QDET is able to surpass the | ||
ddhawan11 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
# problem of correction of double counting of interactions within the active space faced by some | ||
# other embedding theories such as DFT+DMFT. Green's function based formulation of QDET ensures | ||
ddhawan11 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
# exact removal of double counting corrections at GW level of theory, thus removing the | ||
# approximation present in the initial DFT based formulation. This formulation also helps capture | ||
# the response properties and provides access to excited state properties. Another major advantage | ||
# of QDET is the ease with which it can be used with quantum computers in a hybrid framework. | ||
ddhawan11 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
# Therefore, We can conclude here that QDET is a powerful embedding approach for simulating complex | ||
ddhawan11 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
# quantum systems. | ||
# | ||
# References | ||
ddhawan11 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
# ---------- | ||
# | ||
# .. [#ashcroft] | ||
# | ||
# N. W. Ashcroft, D. N. Mermin, | ||
# "Solid State Physics", Chapter 4, New York: Saunders College Publishing, 1976. | ||
# | ||
# .. [#Galli] | ||
# | ||
# Joel Davidsson, Mykyta Onizhuk, *et al.*, "Discovery of atomic clock-like spin defects in simple oxides from first principles" | ||
# `ArXiv <https://arxiv.org/pdf/2302.07523>`__. | ||
# | ||
# .. [#SJRLee] | ||
# Sebastian J. R. Lee, Feizhi Ding, *et al.*, "Analytical Gradients for Projection-Based Wavefunction-in-DFT Embedding." | ||
# `ArXiv <https://arxiv.org/pdf/1903.05830>`__. | ||
# | ||
# .. [#Gagliardi] | ||
# Abhishek Mitra, Matthew Hermes, *et al.*, "Periodic Density Matrix Embedding for CO Adsorption on the MgO(001)Surface." | ||
# `ChemRxiv <https://chemrxiv.org/engage/chemrxiv/article-details/62b0b0c40bba5d82606d2cae>`__. | ||
# | ||
# About the authors | ||
# ----------------- | ||
# |
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.