Commit e94d753
Remove template of ESolver_KS_pw (#7024)
* small format changes
* refactor(esolver): extract charge density symmetrization to Symmetry_rho::symmetrize_rho
- Add static method symmetrize_rho() in Symmetry_rho class
- Replace 7 duplicate code blocks with single function call
- Simplify code from 35 lines to 7 lines (80% reduction)
- Improve code readability and maintainability
Modified files:
- source_estate/module_charge/symmetry_rho.h: add static method declaration
- source_estate/module_charge/symmetry_rho.cpp: implement static method
- source_esolver/esolver_ks_lcao.cpp: 2 calls updated
- source_esolver/esolver_ks_pw.cpp: 1 call updated
- source_esolver/esolver_ks_lcao_tddft.cpp: 1 call updated
- source_esolver/esolver_ks_lcaopw.cpp: 1 call updated
- source_esolver/esolver_of.cpp: 1 call updated
- source_esolver/esolver_sdft_pw.cpp: 1 call updated
This refactoring follows the ESolver cleanup principle:
keep ESolver focused on high-level workflow control.
* refactor(esolver): extract DeltaSpin lambda loop to deltaspin_lcao module
- Create new files deltaspin_lcao.h/cpp in module_deltaspin
- Extract DeltaSpin lambda loop logic from ESolver_KS_LCAO
- Simplify code from 18 lines to 1 line in hamilt2rho_single
- Separate LCAO and PW implementations for DeltaSpin
Modified files:
- source_esolver/esolver_ks_lcao.cpp: replace inline code with function call
- source_lcao/module_deltaspin/CMakeLists.txt: add new source file
New files:
- source_lcao/module_deltaspin/deltaspin_lcao.h: function declaration
- source_lcao/module_deltaspin/deltaspin_lcao.cpp: function implementation
This refactoring follows the ESolver cleanup principle:
keep ESolver focused on high-level workflow control.
* refactor(esolver): complete DeltaSpin refactoring in LCAO
- Add init_deltaspin_lcao() function for DeltaSpin initialization
- Add cal_mi_lcao_wrapper() function for magnetic moment calculation
- Refactor all DeltaSpin-related code in esolver_ks_lcao.cpp
- Simplify code from 29 lines to 3 lines (90% reduction)
Modified files:
- source_esolver/esolver_ks_lcao.cpp: replace 3 code blocks with function calls
- source_lcao/module_deltaspin/deltaspin_lcao.h: add 2 new function declarations
- source_lcao/module_deltaspin/deltaspin_lcao.cpp: implement 2 new functions
This completes the DeltaSpin refactoring for LCAO method:
1. init_deltaspin_lcao() - initialize DeltaSpin calculation
2. cal_mi_lcao_wrapper() - calculate magnetic moments
3. run_deltaspin_lambda_loop_lcao() - run lambda loop optimization
All functions follow the ESolver cleanup principle:
keep ESolver focused on high-level workflow control.
* refactor(esolver): extract DFT+U code to dftu_lcao module
- Create new files dftu_lcao.h/cpp in source_lcao directory
- Add init_dftu_lcao() function for DFT+U initialization
- Add finish_dftu_lcao() function for DFT+U finalization
- Simplify code from 32 lines to 2 lines in esolver_ks_lcao.cpp
- Remove conditional checks from ESolver, move them to functions
Modified files:
- source_esolver/esolver_ks_lcao.cpp: replace 2 code blocks with function calls
- source_lcao/CMakeLists.txt: add new source file
New files:
- source_lcao/dftu_lcao.h: function declarations
- source_lcao/dftu_lcao.cpp: function implementations
This refactoring prepares for unifying old and new DFT+U implementations:
- Old DFT+U: source_lcao/module_dftu/
- New DFT+U: source_lcao/module_operator_lcao/op_dftu_lcao.cpp
All functions follow ESolver cleanup principle:
keep ESolver focused on high-level workflow control.
* refactor(esolver): extract diagonalization parameters setup to hsolver module
- Create new files diago_params.h/cpp in source_hsolver directory
- Add setup_diago_params_pw() function for PW diagonalization parameters
- Simplify code from 11 lines to 1 line in esolver_ks_pw.cpp
- Encapsulate diagonalization parameter setup logic
Modified files:
- source_esolver/esolver_ks_pw.cpp: replace inline code with function call
- source_hsolver/CMakeLists.txt: add new source file
New files:
- source_hsolver/diago_params.h: function declaration
- source_hsolver/diago_params.cpp: function implementation
This refactoring follows ESolver cleanup principle:
keep ESolver focused on high-level workflow control.
* fix(deltaspin): add sc_mag_switch check in cal_mi_lcao_wrapper
- Add Input_para parameter to cal_mi_lcao_wrapper function
- Add sc_mag_switch check to avoid calling cal_mi_lcao when DeltaSpin is disabled
- Fix 'atomCounts is not set' error in non-DeltaSpin calculations
- Update function call in esolver_ks_lcao.cpp
This fix resolves the CI/CD failure caused by commit 2a520e3.
The root cause was that cal_mi_lcao_wrapper was called without checking
sc_mag_switch, leading to uninitialized atomCounts error.
Modified files:
- source_esolver/esolver_ks_lcao.cpp: update function call
- source_lcao/module_deltaspin/deltaspin_lcao.h: add parameter
- source_lcao/module_deltaspin/deltaspin_lcao.cpp: add check
This follows the refactoring principle: preserve original condition checks
when extracting code to wrapper functions.
* fix(deltaspin): add #ifdef __LCAO for conditional compilation
- Add #ifdef __LCAO conditional compilation in init_deltaspin_lcao and cal_mi_lcao_wrapper
- Fix parameter order in init_sc call for LCAO and non-LCAO builds
- Fix undefined reference to cal_mi_lcao in non-LCAO build
This fix resolves CI/CD compilation errors in both build_5pt (with __LCAO) and build_1p (without __LCAO) environments.
The The root cause was 1. init_sc has different parameter order in LCAO vs non-LCAO builds
- LCAO: psi, dm, pelec
- non-LCAO: psi, pelec
2. cal_mi_lcao is only defined in LCAO build
Modified files:
- source_hsolver/diago_params.h: add setup_diago_params_sdft declaration
- source_lcao/module_deltaspin/deltaspin_lcao.cpp: add conditional compilation
This follows the refactoring principle: handle conditional compilation properly
when code has different implementations for different build configurations.
* refactor(esolver): extract SDFT diagonalization parameters setup
- Add setup_diago_params_sdft() function for SDFT diagonalization parameters
- Simplify code from 11 lines to 1 line in esolver_sdft_pw.cpp
- Encapsulate diagonalization parameter setup logic for SDFT
Modified files:
- source_esolver/esolver_sdft_pw.cpp: replace inline code with function call
- source_hsolver/diago_params.cpp: add setup_diago_params_sdft implementation
This refactoring follows ESolver cleanup principle:
keep ESolver focused on high-level workflow control.
Note: SDFT has different parameter setup logic compared to PW:
- Different need_subspace condition
- No SCF_ITER setting
- Always set PW_DIAG_NMAX (no nscf check)
* refactor(hamilt): introduce HamiltBase non-template base class
- Create HamiltBase as a non-template base class for Hamilt<T, Device>
- Modify Hamilt<T, Device> to inherit from HamiltBase
- Change ESolver_KS::p_hamilt type from Hamilt<T, Device>* to HamiltBase*
- Add static_cast where needed when passing p_hamilt to functions expecting Hamilt<T, Device>*
This is the first step towards removing template parameters from ESolver.
Modified files:
- source/source_esolver/esolver_ks.h
- source/source_esolver/esolver_ks_lcaopw.cpp
- source/source_esolver/esolver_ks_pw.cpp
- source/source_esolver/esolver_sdft_pw.cpp
- source/source_hamilt/hamilt.h
New files:
- source/source_hamilt/hamilt_base.h
* refactor(esolver): add static_cast for p_hamilt in esolver files
- Add static_cast<hamilt::Hamilt<T>*> when passing p_hamilt to functions
expecting Hamilt<T, Device>* type
- Split long cast statements into multiple lines for better readability
- Files modified:
- esolver_ks_pw.cpp: setup_pot, stp.init calls
- esolver_ks_lcao.cpp: init_chg_hr, hsolver_lcao_obj.solve calls
- esolver_ks_lcao_tddft.cpp: solve_psi, cal_edm_tddft, matrix calls
- esolver_gets.cpp: ops access, output_SR call
This follows the HamiltBase refactoring strategy where p_hamilt is stored
as HamiltBase* and cast to Hamilt<T, Device>* when needed.
* refactor(esolver): remove psi member from ESolver_KS base class
Move psi::Psi<T>* psi from ESolver_KS base class to derived classes
to eliminate template parameter dependency and improve code organization.
Changes:
1. ESolver_KS base class:
- Remove psi::Psi<T>* psi member variable
- Remove Setup_Psi<T>::deallocate_psi() call in destructor
- Remove unnecessary includes: psi.h and setup_psi.h
2. ESolver_KS_LCAO:
- Add psi::Psi<TK>* psi member variable
- Add Setup_Psi<TK>::deallocate_psi() in destructor
- Add include: setup_psi.h
3. ESolver_KS_LCAO_TDDFT:
- Improve psi_laststep deallocation with nullptr check
- psi member inherited from ESolver_KS_LCAO
4. ESolver_KS_PW:
- Use stp.psi_cpu directly instead of base class psi
- Remove unnecessary memory allocation in after_scf()
5. pw_others.cpp (BUG FIX):
- Fix gen_bessel: use *(this->stp.psi_cpu) instead of this->psi[0]
- Previous code accessed uninitialized base class psi (nullptr)
- This was a latent bug that could cause crashes
Benefits:
- Eliminates template parameter T dependency in ESolver_KS base class
- Clearer memory management: each derived class manages its own psi
- Reduces compilation dependencies
- Fixes potential memory access bug in pw_others.cpp
Tested: Compiled successfully in build_5pt and build_1p
* refactor(esolver): remove template parameters from ESolver_KS base class
This is a major milestone in ESolver refactoring!
ESolver_KS no longer needs template parameters because:
- All member variables are non-template types
- All member functions do not use T or Device parameters
- Template parameters were only needed for derived classes
Changes:
1. ESolver_KS base class:
- Remove template <typename T, typename Device> declaration
- Remove all template declarations from member functions
- Remove template instantiation code at end of file
- Fix Tab indentation to spaces for better readability
2. Derived classes:
- ESolver_KS_PW: public ESolver_KS (was ESolver_KS<T, Device>)
- ESolver_KS_LCAO: public ESolver_KS (was ESolver_KS<TK>)
- ESolver_GetS: public ESolver_KS (was ESolver_KS<std::complex<double>>)
- Update base class calls: ESolver_KS:: (was ESolver_KS<T, Device>::)
Code reduction:
- esolver_ks.h: 78 -> 77 lines (-1 line)
- esolver_ks.cpp: 346 -> 317 lines (-29 lines)
- Total ESolver code: 424 -> 394 lines (-30 lines)
- Overall: 8 files changed, 50 insertions(+), 80 deletions(-), net -30 lines
Benefits:
- Simpler base class without template complexity
- Faster compilation (no template instantiation needed)
- Clearer inheritance hierarchy
- Easier to extract common code in future refactoring
- Sets foundation for further ESolver template removal
Tested: Compiled successfully in build_5pt
* refactor(device): remove explicit template parameter from get_device_type calls
- Move get_device_type implementation to header file using std::is_same
- Add DEVICE_DSP support
- Remove template specialization declarations and definitions
- Update all call sites to use automatic template parameter deduction
- The compiler now deduces Device type from the ctx parameter
* refactor(esolver): remove device member variable from ESolver_KS_PW
- Modify copy_d2h to accept ctx parameter and call get_device_type internally
- Remove device parameter from ctrl_scf_pw function
- Remove device member variable from ESolver_KS_PW class
- Simplify function interfaces by using automatic template deduction
* style(esolver): explicitly initialize ctx to nullptr in constructor
* feat(device): add runtime device type support to DeviceContext
- Add device_type_ member variable to DeviceContext class
- Add set_device_type() and get_device_type() methods
- Add is_cpu(), is_gpu(), is_dsp() convenience methods
- Add get_device_type(const DeviceContext*) overload for runtime device type query
- Maintain backward compatibility with existing template-based get_device_type
* feat(device): add runtime device context overloads for gradual migration
- Add copy_d2h(const DeviceContext*) overload to Setup_Psi_pw
- Add ctrl_scf_pw(..., const DeviceContext*, ...) overload
- Add ctrl_runner_pw(..., const DeviceContext*, ...) overload
- Keep original functions for backward compatibility
- Replace tabs with spaces in modified files
* refactor(esolver): remove ctx member variable from ESolver_KS_PW
- Remove Device* ctx member variable from ESolver_KS_PW class
- Remove ctx parameter from ctrl_scf_pw and ctrl_runner_pw functions
- Add local ctx variable inside ctrl_scf_pw and ctrl_runner_pw functions
- Update all template instantiations to match new function signatures
This refactoring simplifies the code by moving the ctx variable from
a class member to a local variable within the functions that need it.
The ctx variable is only used for template parameter deduction in
copy_d2h and get_pchg_pw/get_wf_pw functions, so it doesn't need to
be stored as a member variable.
* refactor(psi): add runtime type information to Setup_Psi_pw
- Add runtime type information (device_type_ and precision_type_) to Setup_Psi_pw
- Add accessor functions for basic information (get_nbands, get_nk, get_nbasis, size)
- Add accessor functions for runtime type information
- Add get_psi_t() function for backward compatibility
This is the first step of a gradual refactoring to remove template parameters
from Setup_Psi_pw in the future. The current changes are backward compatible
and do not affect existing functionality.
* refactor(esolver): use get_psi_t() accessor instead of direct psi_t access
- Replace all direct access to stp.psi_t with stp.get_psi_t()
- Replace stp.psi_t->get_nbands() with stp.get_nbands()
- This is the second step of gradual refactoring to prepare for removing template parameters
Modified files:
- source/source_esolver/esolver_ks_pw.cpp
- source/source_esolver/esolver_sdft_pw.cpp
- source/source_esolver/esolver_ks_lcaopw.cpp
- source/source_io/module_ctrl/ctrl_output_pw.cpp
* refactor(psi): change psi_t from template pointer to void*
- Change psi_t from psi::Psi<T, Device>* to void*
- Add static_cast in get_psi_t() function for type conversion
- Update all functions that use psi_t to use get_psi_t() or static_cast
- This is the third step of gradual refactoring to remove template parameters
Modified functions:
- before_runner: use if-else instead of ternary operator for void* assignment
- update_psi_d: use get_psi_t() to access psi_t
- init: use get_psi_t() to access psi_t
- copy_d2h: use get_psi_t() to access psi_t
- clean: use get_psi_t() to delete psi_t
* style: replace Chinese comments with English in setup_psi_pw.h
- Replace '原来的模板版本' with 'Original template version'
- Replace '使用 void* 存储指针,运行时类型信息记录实际类型' with 'Use void* to store pointer, runtime type information records actual type'
- Follow ABACUS code style guidelines for English-only comments
* refactor(psi): change psi_d from template pointer to void*
- Change psi_d from psi::Psi<std::complex<double>, Device>* to void*
- Add get_psi_d() accessor function for type conversion
- Update all functions that use psi_d to use get_psi_d()
- This is part of step 1 in phase 4 of gradual refactoring
Modified files:
- source/source_psi/setup_psi_pw.h
- source/source_psi/setup_psi_pw.cpp
- source/source_esolver/esolver_ks_pw.cpp
- source/source_io/module_ctrl/ctrl_output_pw.cpp
* refactor(psi): introduce PSIPrepareBase base class for template removal
This is the first step towards removing template parameters from Setup_Psi_pw.
Changes:
1. Create PSIPrepareBase base class
- Non-template base class for PSIPrepare<T, Device>
- Similar approach to HamiltBase for Hamilt<T, Device>
2. Modify PSIPrepare to inherit from PSIPrepareBase
- Add #include "source_psi/psi_prepare_base.h"
- Change class declaration to inherit from PSIPrepareBase
3. Update Setup_Psi_pw to use PSIPrepareBase*
- Change p_psi_init from PSIPrepare<T, Device>* to PSIPrepareBase*
- Add static_cast when calling PSIPrepare methods
4. Update all PSIPrepare usage in ESolver files
- esolver_ks_pw.cpp: add static_cast before prepare_init call
- esolver_ks_lcaopw.cpp: add static_cast before method calls
Modified files:
- source/source_psi/psi_prepare_base.h (new)
- source/source_psi/psi_prepare.h
- source/source_psi/setup_psi_pw.h
- source/source_psi/setup_psi_pw.cpp
- source/source_esolver/esolver_ks_pw.cpp
- source/source_esolver/esolver_ks_lcaopw.cpp
Benefits:
- Eliminates p_psi_init template dependency from Setup_Psi_pw
- Paves the way for removing template parameters from Setup_Psi_pw
- Maintains type safety through static_cast
- Follows the same pattern as HamiltBase refactoring
Tested: Compiled successfully in build_5pt and build_1p
* refactor(psi): change init() parameter from template to HamiltBase*
This is the second step towards removing template parameters from Setup_Psi_pw.
Changes:
1. Modify init() function signature
- Change parameter from hamilt::Hamilt<T, Device>* to hamilt::HamiltBase*
- Eliminates template dependency in function signature
2. Update init() implementation
- Add static_cast<hamilt::Hamilt<T, Device>*> inside function
- Maintain type safety through explicit cast
3. Update call site in esolver_ks_pw.cpp
- Remove static_cast from call site
- Directly pass p_hamilt (which is already HamiltBase*)
Modified files:
- source/source_psi/setup_psi_pw.h
- source/source_psi/setup_psi_pw.cpp
- source/source_esolver/esolver_ks_pw.cpp
Benefits:
- init() function no longer depends on template parameters in signature
- Simplifies call sites (no cast needed)
- Follows the same pattern as p_hamilt storage in ESolver_KS
- One step closer to removing template parameters from Setup_Psi_pw
Tested: Compiled successfully in build_5pt and build_1p
* refactor(psi): remove template version of copy_d2h function
This is the third step towards removing template parameters from Setup_Psi_pw.
Changes:
1. Remove template version copy_d2h(const Device* ctx)
- Delete the template version from setup_psi_pw.h
- Delete the implementation from setup_psi_pw.cpp
- Keep only the runtime version copy_d2h(const base_device::DeviceContext* ctx)
2. Update call site in ctrl_output_pw.cpp
- Create Device* ctx = nullptr for template parameter deduction
- Use DeviceContext::instance() for runtime device context
- Call copy_d2h with DeviceContext* pointer
Modified files:
- source/source_psi/setup_psi_pw.h
- source/source_psi/setup_psi_pw.cpp
- source/source_io/module_ctrl/ctrl_output_pw.cpp
Benefits:
- Eliminates copy_d2h function's template dependency
- All member functions now use runtime device context
- One step closer to removing template parameters from Setup_Psi_pw
- Maintains backward compatibility with existing code
Technical details:
- get_pchg_pw and get_wf_pw still need Device* ctx for template deduction
- DeviceContext is used for actual device type information
- This follows the gradual migration pattern used in ESolver refactoring
Tested: Compiled successfully in build_5pt and build_1p
* refactor(psi): remove castmem_2d_d2h_op template type alias dependency
This is the fourth step towards removing template parameters from Setup_Psi_pw.
Changes:
1. Remove castmem_2d_d2h_op type alias from setup_psi_pw.h
- The type alias depended on template parameters T and Device
- Replaced with overloaded member functions
2. Add castmem_d2h_impl() overloaded functions
- One overload for std::complex<double> source
- One overload for std::complex<float> source
- Each uses the appropriate cast_memory_op internally
3. Update copy_d2h() to use the new overloaded functions
- Calls castmem_d2h_impl() instead of castmem_2d_d2h_op()
- Compiler selects the correct overload based on T type
Modified files:
- source/source_psi/setup_psi_pw.h
- source/source_psi/setup_psi_pw.cpp
Benefits:
- All member variables now independent of template parameters
- castmem_d2h_impl encapsulates the type-dependent logic
- One step closer to removing template parameters from Setup_Psi_pw
Tested: Compiled successfully in build_5pt and build_1p
* delete useless files
---------
Co-authored-by: abacus_fixer <mohanchen@pku.eud.cn>1 parent 8efe9f5 commit e94d753
10 files changed
Lines changed: 171 additions & 109 deletions
File tree
- source
- source_esolver
- source_io/module_ctrl
- source_psi
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
81 | 81 | | |
82 | 82 | | |
83 | 83 | | |
84 | | - | |
| 84 | + | |
| 85 | + | |
85 | 86 | | |
86 | 87 | | |
87 | 88 | | |
88 | 89 | | |
89 | 90 | | |
90 | 91 | | |
| 92 | + | |
91 | 93 | | |
92 | 94 | | |
93 | | - | |
| 95 | + | |
94 | 96 | | |
95 | 97 | | |
96 | 98 | | |
| |||
105 | 107 | | |
106 | 108 | | |
107 | 109 | | |
108 | | - | |
| 110 | + | |
109 | 111 | | |
110 | 112 | | |
111 | 113 | | |
| |||
146 | 148 | | |
147 | 149 | | |
148 | 150 | | |
149 | | - | |
| 151 | + | |
150 | 152 | | |
151 | 153 | | |
152 | 154 | | |
| |||
240 | 242 | | |
241 | 243 | | |
242 | 244 | | |
243 | | - | |
| 245 | + | |
244 | 246 | | |
245 | 247 | | |
246 | 248 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
43 | 43 | | |
44 | 44 | | |
45 | 45 | | |
46 | | - | |
47 | 46 | | |
48 | 47 | | |
49 | 48 | | |
| |||
112 | 111 | | |
113 | 112 | | |
114 | 113 | | |
115 | | - | |
| 114 | + | |
| 115 | + | |
116 | 116 | | |
117 | 117 | | |
118 | 118 | | |
| |||
128 | 128 | | |
129 | 129 | | |
130 | 130 | | |
131 | | - | |
| 131 | + | |
132 | 132 | | |
133 | 133 | | |
134 | | - | |
| 134 | + | |
135 | 135 | | |
136 | 136 | | |
137 | | - | |
| 137 | + | |
138 | 138 | | |
139 | 139 | | |
140 | 140 | | |
| |||
152 | 152 | | |
153 | 153 | | |
154 | 154 | | |
155 | | - | |
| 155 | + | |
156 | 156 | | |
157 | 157 | | |
158 | 158 | | |
| |||
188 | 188 | | |
189 | 189 | | |
190 | 190 | | |
191 | | - | |
| 191 | + | |
192 | 192 | | |
193 | 193 | | |
194 | 194 | | |
| |||
205 | 205 | | |
206 | 206 | | |
207 | 207 | | |
208 | | - | |
| 208 | + | |
209 | 209 | | |
210 | 210 | | |
211 | 211 | | |
| |||
224 | 224 | | |
225 | 225 | | |
226 | 226 | | |
227 | | - | |
| 227 | + | |
228 | 228 | | |
229 | 229 | | |
230 | 230 | | |
| |||
251 | 251 | | |
252 | 252 | | |
253 | 253 | | |
254 | | - | |
| 254 | + | |
255 | 255 | | |
256 | 256 | | |
257 | 257 | | |
| |||
273 | 273 | | |
274 | 274 | | |
275 | 275 | | |
276 | | - | |
| 276 | + | |
277 | 277 | | |
278 | 278 | | |
279 | 279 | | |
| |||
285 | 285 | | |
286 | 286 | | |
287 | 287 | | |
288 | | - | |
| 288 | + | |
289 | 289 | | |
290 | 290 | | |
291 | 291 | | |
| |||
304 | 304 | | |
305 | 305 | | |
306 | 306 | | |
307 | | - | |
| 307 | + | |
308 | 308 | | |
309 | 309 | | |
310 | 310 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
57 | 57 | | |
58 | 58 | | |
59 | 59 | | |
60 | | - | |
61 | | - | |
62 | | - | |
63 | 60 | | |
64 | 61 | | |
65 | 62 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
168 | 168 | | |
169 | 169 | | |
170 | 170 | | |
171 | | - | |
| 171 | + | |
172 | 172 | | |
173 | 173 | | |
174 | 174 | | |
| |||
221 | 221 | | |
222 | 222 | | |
223 | 223 | | |
224 | | - | |
| 224 | + | |
225 | 225 | | |
226 | 226 | | |
227 | 227 | | |
| |||
236 | 236 | | |
237 | 237 | | |
238 | 238 | | |
239 | | - | |
| 239 | + | |
240 | 240 | | |
241 | 241 | | |
242 | 242 | | |
| |||
289 | 289 | | |
290 | 290 | | |
291 | 291 | | |
292 | | - | |
| 292 | + | |
293 | 293 | | |
294 | 294 | | |
295 | 295 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
91 | 91 | | |
92 | 92 | | |
93 | 93 | | |
94 | | - | |
95 | 94 | | |
96 | 95 | | |
97 | 96 | | |
98 | 97 | | |
99 | 98 | | |
100 | 99 | | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
101 | 103 | | |
102 | | - | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
103 | 107 | | |
104 | 108 | | |
105 | 109 | | |
| |||
164 | 168 | | |
165 | 169 | | |
166 | 170 | | |
167 | | - | |
| 171 | + | |
168 | 172 | | |
169 | 173 | | |
170 | 174 | | |
| |||
173 | 177 | | |
174 | 178 | | |
175 | 179 | | |
176 | | - | |
| 180 | + | |
177 | 181 | | |
178 | 182 | | |
179 | 183 | | |
| |||
235 | 239 | | |
236 | 240 | | |
237 | 241 | | |
238 | | - | |
| 242 | + | |
239 | 243 | | |
240 | 244 | | |
241 | 245 | | |
| |||
255 | 259 | | |
256 | 260 | | |
257 | 261 | | |
258 | | - | |
259 | 262 | | |
260 | 263 | | |
261 | 264 | | |
262 | 265 | | |
263 | 266 | | |
264 | 267 | | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
265 | 271 | | |
266 | 272 | | |
267 | 273 | | |
| |||
303 | 309 | | |
304 | 310 | | |
305 | 311 | | |
306 | | - | |
| 312 | + | |
307 | 313 | | |
308 | 314 | | |
309 | 315 | | |
310 | | - | |
| 316 | + | |
311 | 317 | | |
312 | 318 | | |
313 | 319 | | |
| |||
323 | 329 | | |
324 | 330 | | |
325 | 331 | | |
326 | | - | |
| 332 | + | |
327 | 333 | | |
328 | 334 | | |
329 | 335 | | |
| |||
360 | 366 | | |
361 | 367 | | |
362 | 368 | | |
363 | | - | |
| 369 | + | |
364 | 370 | | |
365 | 371 | | |
366 | 372 | | |
| |||
384 | 390 | | |
385 | 391 | | |
386 | 392 | | |
387 | | - | |
388 | 393 | | |
389 | 394 | | |
390 | 395 | | |
| |||
400 | 405 | | |
401 | 406 | | |
402 | 407 | | |
403 | | - | |
404 | 408 | | |
405 | 409 | | |
406 | 410 | | |
| |||
417 | 421 | | |
418 | 422 | | |
419 | 423 | | |
420 | | - | |
421 | 424 | | |
422 | 425 | | |
423 | 426 | | |
424 | 427 | | |
425 | 428 | | |
426 | | - | |
| 429 | + | |
427 | 430 | | |
428 | 431 | | |
429 | 432 | | |
| |||
433 | 436 | | |
434 | 437 | | |
435 | 438 | | |
436 | | - | |
437 | 439 | | |
438 | 440 | | |
439 | 441 | | |
| |||
444 | 446 | | |
445 | 447 | | |
446 | 448 | | |
447 | | - | |
| 449 | + | |
448 | 450 | | |
449 | | - | |
| 451 | + | |
450 | 452 | | |
451 | 453 | | |
452 | 454 | | |
453 | 455 | | |
454 | | - | |
455 | 456 | | |
456 | 457 | | |
457 | 458 | | |
| |||
461 | 462 | | |
462 | 463 | | |
463 | 464 | | |
464 | | - | |
| 465 | + | |
465 | 466 | | |
466 | | - | |
| 467 | + | |
467 | 468 | | |
468 | 469 | | |
469 | 470 | | |
470 | 471 | | |
471 | | - | |
472 | 472 | | |
473 | 473 | | |
474 | 474 | | |
| |||
481 | 481 | | |
482 | 482 | | |
483 | 483 | | |
484 | | - | |
| 484 | + | |
485 | 485 | | |
486 | 486 | | |
487 | 487 | | |
488 | 488 | | |
489 | | - | |
490 | 489 | | |
491 | 490 | | |
492 | 491 | | |
| |||
498 | 497 | | |
499 | 498 | | |
500 | 499 | | |
501 | | - | |
| 500 | + | |
502 | 501 | | |
503 | 502 | | |
504 | 503 | | |
505 | 504 | | |
506 | | - | |
507 | 505 | | |
508 | 506 | | |
509 | 507 | | |
0 commit comments