-
Notifications
You must be signed in to change notification settings - Fork 47
DC coupled PV and ElectricStorage #476
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
hdunham
wants to merge
174
commits into
develop
Choose a base branch
from
new-dc-couple
base: develop
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
Changes from all commits
Commits
Show all changes
174 commits
Select commit
Hold shift + click to select a range
3931a81
set up testing
hdunham 41af908
add results to compare to
hdunham f6afbd0
Update debugging_tests.jl
hdunham 94192fe
add dc_coupled_with_battery option to PV model
hdunham 001a6ee
rename result file
hdunham 9e8f5e4
update testing
hdunham f79e4a6
warn that PV inv_eff ignored if dc_coupled_with_electric_storage
hdunham 584bc3f
create dc and ac coupled tech sets
hdunham 1d655ce
store dc_(dis)charge_efficiency in ElectricStorage
hdunham 195bd5e
test checkpoint
hdunham 1be7e8c
return dc prod if dc_coupled_with_battery in call_pvwatts_api
hdunham 8b4ad0b
correct call_pvwatts_api arg issues
hdunham 5bdd53d
REVERT LATER temp return ac prod for dc coupled
hdunham a741853
create dvDCCoupledTechStorageInverterSize
hdunham caa574c
create DV for dc coupled inverter size
hdunham 8ee32a6
add dc_couple_inverter_size_kw to ElectricStorage results
hdunham 42b00b3
rename to dc_coupled_with_storage
hdunham 28f36a7
make dc coupled constraints compatible with multinode
hdunham a61629e
call dc coupled constraints if dc coupled tech not not empty
hdunham ee0e7d0
update consrtaint on dvDCCoupledTechStorageInverterSize
hdunham a5072f5
don't let AC coupled techs charge dc coupled bess
hdunham adc276d
update test scenarios
hdunham 7b6c0fe
update testing
hdunham ce59f4f
update testing
hdunham 78dab57
Revert "don't let AC coupled techs charge dc coupled bess"
hdunham 68cda37
Update debugging_tests.jl
hdunham 266f472
testing checkpoint
hdunham 3f25088
Reapply "don't let AC coupled techs charge dc coupled bess"
hdunham 878f864
update testing
hdunham 5eab825
Revert "don't let AC coupled techs charge dc coupled bess"
hdunham 06a4c7f
testing checkpoint
hdunham c0580a5
Reapply "don't let AC coupled techs charge dc coupled bess"
hdunham 99197a3
testing checkpoint after disallowing ac tech to charge dc coupled stor
hdunham 9600ade
separate ac and dc in dvProductionToGrid constraint
hdunham aea4903
collect DVs that can be DC on one side of load balance
hdunham aa33cf3
combine loops thru techs.elec in load bal
hdunham d77b683
separate dc and ac coupled techs in load bal
hdunham 2c0afb0
rearrange load balance without grid
hdunham d45d82b
separate ac and dc tech terms in unservedload const
hdunham 20e0bd8
testing checkpoint
hdunham b650cac
add ac dc tech constraints to outage_constraints
hdunham c1ab4cb
fix and call ac dc tech constraints in outage_constraints
hdunham 636efde
correct add_dc_coupled_tech_elec_storage_constraints
hdunham 61c4762
testing checkpoint
hdunham d075a4a
separate ac and dc coupled techs in add_elec_storage_dispatch_constra…
hdunham 489c358
note PV size_kw is DC capacity
hdunham 5786602
delete commented out code
hdunham 0c18be6
rm sum for b in storage.types.elec b/c b passed in
hdunham 4ebe22d
Add rectifier direction to dc couple inv min size constraint
hdunham e96b1fc
readability
hdunham 3be4f2c
testing checkpoint
hdunham 9706854
combine terms that can be DC in AnnualREEleckWh calc
hdunham b3f926e
separate dc coupled techs in AnnualREEleckWh calc and mult by inv effic
hdunham c006452
handle ElectricStorage not existing in AnnualREEleckWh calc
hdunham 3422724
rm dupe constraint on dvDCCoupledTechStorageInverterSize
hdunham 42708f9
clarifying comment
hdunham 43d9bfc
test checkpoint (done cherry picking)
hdunham b7c188c
rm dupe constraints
hdunham 3b65bfb
separate ac and dc techs in add_production_constraints
hdunham b813c1d
separate ac and dc techs in MG SOC equation
hdunham 5d39b2b
include prod to dc stor from ac techs even tho 0 for future dev ease
hdunham c4b03ed
test checkpoint (separated ac dc terms)
hdunham 9124b1d
fix misnamed tech sets
hdunham 7459cac
new testing set up to compare effect of incremental changes
hdunham e5510c9
REVERT "temp return ac prod for dc coupled"
hdunham c4b2926
correct filename in new test
hdunham 79de826
correct new test
hdunham 6dd3656
test changes (pv size down, pv prod up, lcc down)
hdunham fd59515
use inv effic in add_production_constraints
hdunham ca5ea25
use dc_charge_efficiency in SOC constraint
hdunham 74d2f9d
use dc_charge_efficiency in MG SOC constraint
hdunham 13f2459
test changes (pv size down, pv prod down, stor up, lcc down)
hdunham bf9b05c
in prevent simul (dis)charge consts: separate ac/dc techs, use dc_cha…
hdunham db3c38c
test changes (only pv to stor down)
hdunham fa4d844
use inv effic in AnnualREEleckWh calc
hdunham 12c980d
test changes (annual_renewable_electricity_kwhn down)
hdunham b71c0aa
use inv effic in add_elec_load_balance_constraints
hdunham 565ee28
test changes (stor kwh down, to stor down, inv up, pv up, lcc up)
hdunham 7936131
use inv effic in add_dv_UnservedLoad_constraints
hdunham a6084d4
test (Outages pv_to_load_series_kw up b/c still DC)
hdunham bc583b5
use inv effic in results PVtoLoad calc
hdunham 1e6db68
test (no solution change, only output series vals)
hdunham 37b2d7f
rm isempty(p.s.storage.types.elec) ?
hdunham d5ff54c
condense 3 stor power const into 1
hdunham 2849f31
(MG) condense 3 stor power const into 1
hdunham d88f903
separate ac and dc coupled techs in elec stor power constraints
hdunham e87936d
correct separate ac and dc coupled techs in elec stor power constraints
hdunham 6ab6617
test no change
hdunham 14d281f
add dc_coupled input to ElectricStorage
hdunham 638f3c9
create dc_coupled storage set
hdunham 231547c
add dc_coupled input to dc test posts
hdunham 0885aa8
apply efficiencies in stor power constraints
hdunham 0bac613
test (size_kw, size_kwh, pv, lcc all up)
hdunham 9601ec4
use dc_coupled stor set to call add_dc_coupled_tech_elec_storage_cons…
hdunham 0cbe847
add DC to DV name to clarify
hdunham 6f9c860
apply inv and rect effic in dvDCCoupledTechStorageInverterSizeDC cons…
hdunham 059a087
apply inv and rect effic in outages dvDCCoupledTechStorageInverterSiz…
hdunham defa5cd
merge DC coupled inverter constraints charge/discharge directions
hdunham 4ef6429
test (no change)
hdunham 24ddaa3
check p.s.storage.types.dc_coupled empty not p.techs.dc_couple_with_stor
hdunham b9e557c
add ac_coupled storage set
hdunham 2483373
always use !isempty(p.s.storage.types.dc_coupled) as condition
hdunham 45e1f0b
update storage cap cost objective term
hdunham 618d21e
update big M calc in outage_constraints
hdunham 57932b1
dvDCCoupledTechStorageInverterSizeDC >= dvStoragePower
hdunham 032527a
test no changes
hdunham 0108a99
rm debuging infos
hdunham a3d774b
rm commented old line
hdunham ccca421
index dvDCCoupledTechStorageInverterSizeDC on only dc coupled stors
hdunham 940a86b
update check before getting result
hdunham 3cd3ea1
test no changes
hdunham 4ee31a7
rename dc_couple_with_stor to dc_coupled_with_storage
hdunham 338a640
formatting
hdunham 7312563
Don’t allow existing PV that is DC coupled
hdunham 30eccac
Enforce storage dc coupled input to be true if PV one is
hdunham b7b4976
add missed end
hdunham 500bf01
test no changes
hdunham 7112d00
test error if PV dc coupled but not stor
hdunham 87914c7
Revert "test error if PV dc coupled but not stor"
hdunham eeed005
error if stor dc coupled but pv not
hdunham 7b1b445
Merge branch 'develop' into new-dc-couple
hdunham 3a43c08
Merge branch 'develop' into new-dc-couple
hdunham 72dd5d8
use dc coupled inverter size in battery capex result
hdunham 2160481
use dc coupled inverter size in initial_capex function
hdunham a20d835
rename p.techs.ac_couple_with_stor to ac_coupled_with_storage
hdunham 20221a3
test only emissions changes
hdunham 52d5414
use dc coupled inverter size in proforma
hdunham 53dc3f1
fix batt size and inverter size switched
hdunham 48f447b
default can_grid_charge to false if dc_coupled
hdunham 01f5a01
error if off grid and dc coupling
hdunham c8dd58e
handle MPCElectricStorage not having dc_coupled field
hdunham 862803d
update no ac to dc and visa versa charging
hdunham fc26f3b
rm dc tech to ac stor term causing attr error
hdunham 744005a
use dc_coupled set not attr for MPC compat
hdunham 42ee652
in proforma only get dc_couple_inverter_size_kw if dc_coupled
hdunham 5b0160e
rename to dc_coupled_inverter_size_kw
hdunham 938a7e7
test no changes
hdunham 9d8ea4b
debugging
hdunham a7d49e5
rm debugging files
hdunham dabc419
(MG) update no ac to dc and visa versa charging
hdunham 97492e7
apply inv effic to dvProdIncent const
hdunham 1d9faa8
use ac and dc coupled storage sets to reduce # of constr
hdunham 4c14340
warn in ERP if elec stor is dc coupled
hdunham 64aa393
don't expose <>charge_efficiency fields
hdunham 12ef848
debug offgrid
hdunham 95186d4
Revert "debug offgrid"
hdunham cdef19e
intersect not union oops
hdunham e2226ae
Update CHANGELOG.md
hdunham 1fa603a
delete unused testing files
hdunham ff4e893
Merge branch 'develop' into new-dc-couple
hdunham 1a3d949
Update CHANGELOG.md
adfarth 0082851
rm dc_discharge_efficiency from ElectricStorage
hdunham 722122c
Merge branch 'new-dc-couple' of https://github.com/NREL/REopt.jl into…
hdunham 63c998a
test no changes
hdunham 6214f80
change dc coupled inv size to AC
hdunham 1b95021
test no meaningful changes
hdunham 57c5ffa
use set storage.types.dc_coupled in Scenario()
hdunham c63e86e
test no changes
hdunham 3f4b69b
add ac prefix to (dis)charge_efficiency
hdunham 344c521
rename to dvHybridInverterSizeAC
hdunham 9a95fda
todo comment
hdunham 8536f9c
default ElectricStorage.dc_coupled=true if any PV.dc_coupled_with_sto…
hdunham c2c1bfd
fix syntax
hdunham 3bf2cd9
rm dc_coupled input from tests to test default behavior
hdunham 72fa189
test no changes
hdunham 4a2a579
update constraint numbering
hdunham 89c432a
update constraint numbering/comment
hdunham b99841f
use time_step_wrap_around more places where needed
hdunham 526654e
update comment
hdunham 1034c6f
Apply rectifier efficiency when dc coupled in OR constraints 1,4
hdunham 72dc85c
handle dc coupled stor in OR constr 3
hdunham ec3dea1
docstring notes about cost defaults being ac coupled
hdunham 542f67a
small helptext update
adfarth 7eb1b32
minor comment mods
adfarth 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
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 |
|---|---|---|
|
|
@@ -5,13 +5,19 @@ function add_elec_load_balance_constraints(m, p; _n="") | |
| ##Constraint (8a): Electrical Load Balancing with Grid | ||
| if isempty(p.s.electric_tariff.export_bins) | ||
| conrefs = @constraint(m, [ts in p.time_steps_with_grid], | ||
| sum(p.production_factor[t, ts] * p.levelization_factor[t] * m[Symbol("dvRatedProduction"*_n)][t,ts] for t in p.techs.elec) | ||
| + sum(m[Symbol("dvDischargeFromStorage"*_n)][b,ts] for b in p.s.storage.types.elec) | ||
| sum(p.production_factor[t, ts] * p.levelization_factor[t] * m[Symbol("dvRatedProduction"*_n)][t,ts] | ||
| - sum(m[Symbol("dvProductionToStorage"*_n)][b, t, ts] for b in p.s.storage.types.ac_coupled) | ||
| - m[Symbol("dvCurtail"*_n)][t, ts] | ||
| for t in p.techs.ac_coupled_with_storage) | ||
| + sum(p.s.storage.attr["ElectricStorage"].inverter_efficiency_fraction * ( # convert DC to AC | ||
| p.production_factor[t, ts] * p.levelization_factor[t] * m[Symbol("dvRatedProduction"*_n)][t,ts] | ||
| - sum(m[Symbol("dvProductionToStorage"*_n)][b, t, ts] for b in p.s.storage.types.dc_coupled) | ||
| - m[Symbol("dvCurtail"*_n)][t, ts]) | ||
| for t in p.techs.dc_coupled_with_storage) | ||
| + sum(m[Symbol("dvDischargeFromStorage"*_n)][b,ts] for b in p.s.storage.types.elec) # dvDischargeFromStorage is AC | ||
| + sum(m[Symbol("dvGridPurchase"*_n)][ts, tier] for tier in 1:p.s.electric_tariff.n_energy_tiers) | ||
| == | ||
| sum(sum(m[Symbol("dvProductionToStorage"*_n)][b, t, ts] for b in p.s.storage.types.elec) | ||
| + m[Symbol("dvCurtail"*_n)][t, ts] for t in p.techs.elec) | ||
| + sum(m[Symbol("dvGridToStorage"*_n)][b, ts] for b in p.s.storage.types.elec) | ||
| sum(m[Symbol("dvGridToStorage"*_n)][b, ts] for b in p.s.storage.types.elec) | ||
| + sum(m[Symbol("dvCoolingProduction"*_n)][t, ts] / p.cooling_cop[t][ts] for t in setdiff(p.techs.cooling,p.techs.ghp)) | ||
| + sum(m[Symbol("dvHeatingProduction"*_n)][t, q, ts] / p.heating_cop[t][ts] for q in p.heating_loads, t in p.techs.electric_heater) | ||
| + p.s.electric_load.loads_kw[ts] | ||
|
|
@@ -20,13 +26,19 @@ function add_elec_load_balance_constraints(m, p; _n="") | |
| ) | ||
| else | ||
| conrefs = @constraint(m, [ts in p.time_steps_with_grid], | ||
| sum(p.production_factor[t, ts] * p.levelization_factor[t] * m[Symbol("dvRatedProduction"*_n)][t,ts] for t in p.techs.elec) | ||
| sum(p.production_factor[t, ts] * p.levelization_factor[t] * m[Symbol("dvRatedProduction"*_n)][t,ts] | ||
| - sum(m[Symbol("dvProductionToStorage"*_n)][b, t, ts] for b in p.s.storage.types.ac_coupled) | ||
| - m[Symbol("dvCurtail"*_n)][t, ts] | ||
| for t in p.techs.ac_coupled_with_storage) | ||
| + sum(p.s.storage.attr["ElectricStorage"].inverter_efficiency_fraction * ( # convert DC to AC | ||
| p.production_factor[t, ts] * p.levelization_factor[t] * m[Symbol("dvRatedProduction"*_n)][t,ts] | ||
| - sum(m[Symbol("dvProductionToStorage"*_n)][b, t, ts] for b in p.s.storage.types.dc_coupled) | ||
| - m[Symbol("dvCurtail"*_n)][t, ts]) | ||
| for t in p.techs.dc_coupled_with_storage) | ||
| + sum(m[Symbol("dvDischargeFromStorage"*_n)][b,ts] for b in p.s.storage.types.elec ) | ||
| + sum(m[Symbol("dvGridPurchase"*_n)][ts, tier] for tier in 1:p.s.electric_tariff.n_energy_tiers) | ||
| == | ||
| sum(sum(m[Symbol("dvProductionToStorage"*_n)][b, t, ts] for b in p.s.storage.types.elec) | ||
| + sum(m[Symbol("dvProductionToGrid"*_n)][t, u, ts] for u in p.export_bins_by_tech[t]) | ||
| + m[Symbol("dvCurtail"*_n)][t, ts] for t in p.techs.elec) | ||
| sum(m[Symbol("dvProductionToGrid"*_n)][t, u, ts] for t in p.techs.elec, u in p.export_bins_by_tech[t]) | ||
| + sum(m[Symbol("dvGridToStorage"*_n)][b, ts] for b in p.s.storage.types.elec) | ||
| + sum(m[Symbol("dvCoolingProduction"*_n)][t, ts] / p.cooling_cop[t][ts] for t in setdiff(p.techs.cooling,p.techs.ghp)) | ||
| + sum(m[Symbol("dvHeatingProduction"*_n)][t, q, ts] / p.heating_cop[t][ts] for q in p.heating_loads, t in p.techs.electric_heater) | ||
|
|
@@ -43,21 +55,34 @@ function add_elec_load_balance_constraints(m, p; _n="") | |
| ##Constraint (8b): Electrical Load Balancing without Grid | ||
| if !p.s.settings.off_grid_flag # load balancing constraint for grid-connected runs | ||
| @constraint(m, [ts in p.time_steps_without_grid], | ||
| sum(p.production_factor[t,ts] * p.levelization_factor[t] * m[Symbol("dvRatedProduction"*_n)][t,ts] for t in p.techs.elec) | ||
| sum(p.production_factor[t, ts] * p.levelization_factor[t] * m[Symbol("dvRatedProduction"*_n)][t,ts] | ||
| - sum(m[Symbol("dvProductionToStorage"*_n)][b, t, ts] for b in p.s.storage.types.ac_coupled) | ||
| - m[Symbol("dvCurtail"*_n)][t, ts] | ||
| for t in p.techs.ac_coupled_with_storage) | ||
| + sum(p.s.storage.attr["ElectricStorage"].inverter_efficiency_fraction * ( # convert DC to AC | ||
| p.production_factor[t, ts] * p.levelization_factor[t] * m[Symbol("dvRatedProduction"*_n)][t,ts] | ||
| - sum(m[Symbol("dvProductionToStorage"*_n)][b, t, ts] for b in p.s.storage.types.dc_coupled) | ||
| - m[Symbol("dvCurtail"*_n)][t, ts]) | ||
| for t in p.techs.dc_coupled_with_storage) | ||
| + sum(m[Symbol("dvDischargeFromStorage"*_n)][b,ts] for b in p.s.storage.types.elec) | ||
| == | ||
| sum(sum(m[Symbol("dvProductionToStorage"*_n)][b, t, ts] for b in p.s.storage.types.elec) | ||
| + m[Symbol("dvCurtail"*_n)][t, ts] for t in p.techs.elec) | ||
| + p.s.electric_load.critical_loads_kw[ts] | ||
| p.s.electric_load.critical_loads_kw[ts] | ||
| ) | ||
| else # load balancing constraint for off-grid runs | ||
| # TODO: make off-grid compatible with dc coupled tech + storage by updating add_operating_reserve_constraints | ||
| @constraint(m, [ts in p.time_steps_without_grid], | ||
| sum(p.production_factor[t,ts] * p.levelization_factor[t] * m[Symbol("dvRatedProduction"*_n)][t,ts] for t in p.techs.elec) | ||
| sum(p.production_factor[t, ts] * p.levelization_factor[t] * m[Symbol("dvRatedProduction"*_n)][t,ts] | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. is this just partially set up for off-grid runs for if you have time to finish this in the future (with the OR constraints)? If so, maybe add a note / TODO here? |
||
| - sum(m[Symbol("dvProductionToStorage"*_n)][b, t, ts] for b in p.s.storage.types.ac_coupled) | ||
| - m[Symbol("dvCurtail"*_n)][t, ts] | ||
| for t in p.techs.ac_coupled_with_storage) | ||
| + sum(p.s.storage.attr["ElectricStorage"].inverter_efficiency_fraction * ( # convert DC to AC | ||
| p.production_factor[t, ts] * p.levelization_factor[t] * m[Symbol("dvRatedProduction"*_n)][t,ts] | ||
| - sum(m[Symbol("dvProductionToStorage"*_n)][b, t, ts] for b in p.s.storage.types.dc_coupled) | ||
| - m[Symbol("dvCurtail"*_n)][t, ts]) | ||
| for t in p.techs.dc_coupled_with_storage) | ||
| + sum(m[Symbol("dvDischargeFromStorage"*_n)][b,ts] for b in p.s.storage.types.elec) | ||
| == | ||
| sum(sum(m[Symbol("dvProductionToStorage"*_n)][b, t, ts] for b in p.s.storage.types.elec) | ||
| + m[Symbol("dvCurtail"*_n)][t, ts] for t in p.techs.elec) | ||
| + p.s.electric_load.critical_loads_kw[ts] * m[Symbol("dvOffgridLoadServedFraction"*_n)][ts] | ||
| p.s.electric_load.critical_loads_kw[ts] * m[Symbol("dvOffgridLoadServedFraction"*_n)][ts] | ||
| ) | ||
| ##Constraint : For off-grid scenarios, annual load served must be >= minimum percent specified | ||
| @constraint(m, | ||
|
|
@@ -80,12 +105,21 @@ function add_production_constraints(m, p; _n="") | |
| p.production_factor[t, ts] * p.levelization_factor[t] * m[Symbol("dvRatedProduction"*_n)][t, ts] | ||
| ) | ||
| else | ||
| @constraint(m, [t in p.techs.elec, ts in p.time_steps_with_grid], | ||
| sum(m[Symbol("dvProductionToStorage"*_n)][b, t, ts] for b in p.s.storage.types.elec) | ||
| + m[Symbol("dvCurtail"*_n)][t, ts] | ||
| + sum(m[Symbol("dvProductionToGrid"*_n)][t, u, ts] for u in p.export_bins_by_tech[t]) | ||
| <= | ||
| @constraint(m, [t in p.techs.ac_coupled_with_storage, ts in p.time_steps_with_grid], | ||
| sum(m[Symbol("dvProductionToGrid"*_n)][t, u, ts] for u in p.export_bins_by_tech[t]) | ||
| <= | ||
| p.production_factor[t, ts] * p.levelization_factor[t] * m[Symbol("dvRatedProduction"*_n)][t, ts] | ||
| - sum(m[Symbol("dvProductionToStorage"*_n)][b, t, ts] for b in p.s.storage.types.elec) | ||
| - m[Symbol("dvCurtail"*_n)][t, ts] | ||
| ) | ||
| @constraint(m, [t in p.techs.dc_coupled_with_storage, ts in p.time_steps_with_grid], | ||
| sum(m[Symbol("dvProductionToGrid"*_n)][t, u, ts] for u in p.export_bins_by_tech[t]) | ||
| <= | ||
| p.s.storage.attr["ElectricStorage"].inverter_efficiency_fraction * ( | ||
| p.production_factor[t, ts] * p.levelization_factor[t] * m[Symbol("dvRatedProduction"*_n)][t, ts] | ||
| - sum(m[Symbol("dvProductionToStorage"*_n)][b, t, ts] for b in p.s.storage.types.elec) | ||
| - m[Symbol("dvCurtail"*_n)][t, ts] | ||
| ) | ||
| ) | ||
| end | ||
|
|
||
|
|
||
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.