<commit_before>
//Common parameters for the model Hamiltonian
model::model_type                         = lbit                             /*!< Choice of model: {ising_tf_rf,ising_sdual,lbit} */
model::model_size                         = 32                               /*!< Number of sites on the chain. Only relevant for finite algorithms: fDMRG and xDMRG */


//Console settings
console::verbosity                        = 2                                 /*!< Level of verbosity desired [0-6]. Level 0 prints everything, 6 nothing. Level 2 or 3 is recommended for normal use */
console::timestamp                        = true                              /*!< (NOT IMPLEMENTED) Whether to put a timestamp on console outputs */

// Parameters for Multithreading
threading::stl_threads                    = 1                                 /*!< Number of threads for openmp threads used in blas/lapack and Eigen. num_threads <= 0 will try to use as many as possible */
threading::omp_threads                    = 2                                 /*!< Number of threads for c++11 threading. Used in Eigen::Tensor. stl_threads <= 0 will try to use as many as possible */


//Parameters to control profiling.
profiling::on                             = true                              /*!< If true, turns on profiling and timings will be shown on console. */
profiling::precision                      = 5                                 /*!< Sets precision (number of decimals) of time output. */
profiling::extra                          = false                             /*!< Prints profiling updates after each step */


// Input parameters (note that CLI parameters overrwide these)
input::seed                               = 1                                 /*!< Main seed for the random number generator. */
input::bitfield                           = -1                                /*!< Number whose bitfield represents the initial product state in the basis given by initial_parity_sector. Only positive state numbers are used */


//Parameters for saving data to hdf5
output::output_filepath                   = ../output/mbl.h5                  /*!< Path of the output HDF5 file relative to the execution point  */
output::save_profiling                    = true                              /*!< Whether to save profiling information to file. (only enabled on storage level NORMAL and FULL.) */
output::savepoint_keep_newest_only        = true                              /*!< If true, a savepoint will overwrite previous savepoints on file. Otherwise, all iterations are kept (dramaticallay increases file size) */
output::savepoint_frequency               = 50                                /*!< How often, in units of iterations, to make a savepoint. 0 disables savepoints after iterations (chi-update savepoints can still happen) */
output::checkpoint_keep_newest_only       = true                              /*!< If true, a checkpoint will overwrite previous checkpoint on file. Otherwise, all iterations are kept (dramaticallay increases file size) */
output::checkpoint_keep_chi_updates       = false                             /*!< If true, a checkpoint is written to file before the bond dimension is updated */
output::checkpoint_frequency              = 1                                 /*!< How often, in units of iterations, to make a checkpoint. 0 disables checkpoints but chi-update checkpoints can still happen */
output::use_temp_dir                      = true                              /*!< If true uses a temporary directory for writes in the local drive (usually /tmp) and copies the results afterwards */
output::copy_from_temp_freq               = 25                                /*!< How often, in units of iterations, to copy the hdf5 file in tmp dir to target destination */
output::temp_dir                          = /tmp                              /*!< Local temp directory on the local system. If it does not exist we default to /scratch/local or /tmp instead (or whatever is the default) */
output::compression_level                 = 4                                 /*!< Attempt to use this compression level with HDF5. Choose between [0-9] (0 = off, 9 = max compression) */
output::file_collision_policy             = RESUME                            /*!< What to do when a prior output file is found. Choose between RESUME, BACKUP, RENAME, REPLACE */
output::file_resume_policy                = FAST                              /*!< Depends on dataset [common/finished_all=bool] FULL: Ignore bool -> Scan .cfg to add missing items. FAST: exit if true. */



// Storage Levels.
// NOTE 1: A simulation can only be resumed from FULL storage.
// NOTE 2: storage_level_model == NORMAL is enough to recreate MPOs when resuming, since they can be reconstructed from the Hamiltonian parameter table
//      NONE:   no data is saved at all
//      LIGHT:  Mainly mid-chain data (energy/variance/polarization, schmidt values, entanglement entropy, lambda matrix, truncation error) , simulation status, and profiling (if save_profiling == true)
//      NORMAL: Same as LIGHT + whole-chain measurements like entanglement entropies, truncation errors and schmidt values (lambda-matrices), and model Hamiltonian parameters
//      FULL:   Same as NORMAL + MPS (Gamma + Lambda matrices) + MPO at each site.
output::storage_level_model               = NORMAL                           /*!< Storage level for the model realization. LIGHT stores nothing. NORMAL stores the Hamiltonian parameter table, and FULL also the MPOs */
output::storage_level_savepoint           = FULL                             /*!< Storage level for savepoints, which are snapshots used for resume */
output::storage_level_checkpoint          = LIGHT                            /*!< Storage level for checkpoints, which are mid-simulation measurements (can also be used for resume if FULL) */
output::storage_level_good_state          = NORMAL                           /*!< Storage level for final results written when a simulation terminates successfully */
output::storage_level_fail_state          = NORMAL                           /*!< Storage level for final results written when a simulation terminates unsuccessfully */
output::storage_level_proj_state          = NORMAL                           /*!< Storage level for the parity projected states, a projected version of the state written when a simulation terminates */
output::storage_level_init_state          = NORMAL                           /*!< Storage level for the initial states (for instance when launching a simulation or starting a new state) */
output::storage_level_emin_state          = NORMAL                           /*!< Storage level for the minimum energy state (ground state) */
output::storage_level_emax_state          = NORMAL                           /*!< Storage level for the maximum energy state */



// Options for strategy that affect convergence and targeted state
strategy::compress_mpo_squared            = false                             /*!< Use SVD to compress the squared mpo bond dimension (Only for finite systems) */
strategy::chi_quench_when_stuck           = false                             /*!< Reduce chi for a few iterations when stuck and increasing bond dimension would not help */
strategy::perturb_when_stuck              = false                             /*!< Perturb MPO parameters to get unstuck from local minima */
strategy::damping_when_stuck              = false                             /*!< Dampen MPO parameters by reducing disorder, to get unstuck from local minima */
strategy::discard_schmidt_when_stuck      = false                             /*!< Try discarding smallest schmidt values when stuck */
strategy::project_trial_when_stuck        = false                             /*!< Project to target parity sector at the end of an iteration when stuck. */
strategy::project_on_every_iter           = false                             /*!< Project to target parity sector at the end of every iteration. This implies doing it when stuck also. */
strategy::project_on_chi_update           = false                             /*!< Project to target parity sector when bond dimension is increased (only works if chi_grow == true). */
strategy::project_initial_state           = false                             /*!< Project to target parity sector when initializing a state. */
strategy::randomize_on_chi_update         = false                             /*!< Randomize MPS by flipping random spins when growing chi */
strategy::randomize_early                 = false                             /*!< Randomize MPS by flipping random spins before fully converging the first attempt (because the initial product state guess is biased to low entanglement) */
strategy::use_eigenspinors                = true                              /*!< Use random pauli-matrix eigenvectors when initializing each mps site along x,y or z  */
strategy::max_resets                      = 1                                 /*!< Maximum number of resets to initial state. One must be allowed for initialization*/
strategy::multisite_max_sites             = 6                                 /*!< Maximum number of sites in multi-site dmrg. Too many sites (>12 or so) makes the contractions slow. */
strategy::multisite_move                  = MAX                               /*!< How many sites to move after a multi-site dmrg step, choose between {ONE, MID, MAX} */
strategy::target_sector                   = +z                                /*!< Find an eigenstate in this parity sector. Choose between {x,+x,-x, y, +y,-y, z,+z,-z, randomAxis,random,none}  */
strategy::initial_type                    = REAL                              /*!< Initial state can be REAL/CPLX */
strategy::initial_state                   = PRODUCT_STATE_NEEL                /*!< Initial configuration for the spin chain (only for finite systems)  */
strategy::secondary_states                = PRODUCT_STATE_NEEL                /*!< Spin configuration for subsequent states (only for finite systems)  */



//Parmaters that control MPS, eigensolver and SVD precision
precision::eig_max_iter                   = 2000                              /*!< Maximum number of steps for eigenvalue solver. */
precision::eig_threshold                  = 1e-12                             /*!< Minimum threshold for halting eigenvalue solver. */
precision::eig_max_ncv                    = 16                                /*!< Parameter controlling the column space? of the Lanczos solver. 16 is close to optimum when chi = 16. Coincidence? */
precision::svd_threshold                  = 1e-8                              /*!< Minimum threshold value for keeping singular values. */
precision::svd_switchsize                 = 16                                /*!< Linear size of a matrix, below which BDCSVD will use slower but more precise JacobiSVD instead (default is 16) */
precision::variance_convergence_threshold = 1e-12                             /*!< Variance convergence threshold. The MPS state is considered good enough when its variance reaches below this value */
precision::variance_slope_threshold       = 5                                 /*!< Variance saturation slope threshold [0-100%]. The variance has saturated when its (absolute) slope reaches below this value. 2 would mean the data saturates when it changes less than 2% per iteration */
precision::entropy_slope_threshold        = 1                                 /*!< Entanglement Entropy saturation slope threshold [0-100%]. The entanglement entropy has saturated when its (absolute) slope reaches below this value. 2 would mean the data saturates when it changes less than 2% per iteration */
precision::subspace_error_factor          = 1                                 /*!< Minimum quality of subspace for going ahead in variance optimization. If the quality is too bad, direct optimization is done instead */
precision::max_subspace_error             = 1e-12                             /*!< The maximum subspace error. Never do subspace variance optimization with subspace error greater than this. */
precision::min_subspace_error             = 1e-12                             /*!< The minimum subspace error. Always do subspace variance optimization with subspace error less than this  */
precision::max_size_full_diag             = 2048                              /*!< Maximum linear size allowed for full diagonalization of the local hamiltonian matrix. Use 0 to allow any value */
precision::max_size_part_diag             = 4096                              /*!< Maximum linear size allowed for partial diagonalization of the local hamiltonian matrix. Use 0 to allow any value */
precision::max_size_direct                = 2097152                           /*!< Maximum linear size for direct multisite dmrg. If the linear size is larger than this, the algorithm prefers 2-site dmrg. */
precision::max_norm_error                 = 1e-10                             /*!< Maximum norm deviation from unity during integrity checks */
precision::use_reduced_energy             = true                              /*!< Whether to subtract E/L from each mpo to avoid catastrophic cancellation when computing the variance */



//Parameters for the transvese-field next-nearest neighbor Ising model with a random field
model::ising_tf_rf::J1                    = 1.0                               /*!< Ferromagnetic coupling for nearest neighbors.*/
model::ising_tf_rf::J2                    = 0.0                               /*!< Ferromagnetic coupling for next-nearest neighbors.*/
model::ising_tf_rf::h_tran                = 1.0                               /*!< Transverse field strength */
model::ising_tf_rf::h_mean                = 0.0                               /*!< Random field mean of distribution */
model::ising_tf_rf::h_stdv                = 0.0                               /*!< Random field standard deviation. In distribution this is N(h_mean,h_stdv) or U(h_mean-h_stdv,h_mean+h_stdv) */
model::ising_tf_rf::spin_dim              = 2                                 /*!< Spin dimension */
model::ising_tf_rf::distribution          = uniform                           /*!< Random distribution for couplings and fields */


//Parameters for the selfdual transverse-field random-field next-nearest neighbor Ising model
model::ising_sdual::J_stdv                = 1.0                               /*!< Standard deviation for the log-normal distribution defining ferromagnetic coupling */
model::ising_sdual::h_stdv                = 1.0                               /*!< Standard deviation for the log-normal distribution defining transverse magnetic field */
model::ising_sdual::lambda                = 0.0                               /*!< Lambda parameter */
model::ising_sdual::delta                 = 0.0                               /*!< Delta defined as log(J_mean) - log(h_mean). We get J_mean and h_mean by fixing max(J_mean,h_mean) = 1 */
model::ising_sdual::spin_dim              = 2                                 /*!< Spin dimension */
model::ising_sdual::parity_sep            = false                             /*!< Separation of +-X parity sectors */
model::ising_sdual::distribution          = lognormal                         /*!< Random distribution for couplings and fields */

//Parameters for the l-bit hamiltonian
model::lbit::J1_mean                      = 0.00                              /*!< Constant offset for on-site */
model::lbit::J2_mean                      = 0.25                              /*!< Constant offset for two-body interaction */
model::lbit::J3_mean                      = 0.00                              /*!< Constant offset for three-body interaction */
model::lbit::J1_wdth                      = 1.00                              /*!< Width of the uniform box distribution U(-w1,w1) for on-site interactions */
model::lbit::J2_wdth                      = 0.50                              /*!< Width of the uniform box distribution U(-w2,w2) for two-body interaction */
model::lbit::J3_wdth                      = 0.25                              /*!< Width of the uniform box distribution U(-w3,w3) for three-body interaction */
model::lbit::fmix                         = 0.20                              /*!< Mixing factor for unitary transformation to real-space */
model::lbit::spin_dim                     = 2                                 /*!< Spin dimension */
model::lbit::distribution                 = uniform                           /*!< Random distribution for interaction strengths */


//Parameters controlling iDMRG
idmrg::on                                 = false                             /*!< Turns iDMRG simulation on/off. */
idmrg::max_iters                          = 500                               /*!< Number of iterations. */
idmrg::chi_lim_max                        = 64                                /*!< Bond dimension of the current position (maximum number of singular values to keep in SVD). */
idmrg::chi_lim_grow                       = true                              /*!< Whether to increase chi slowly up to chi_max or go up to chi_max directly. */
idmrg::chi_lim_init                       = 8                                 /*!< Initial chi limit. Only used when chi_grow == true. */
idmrg::print_freq                         = 1                                 /*!< Print frequency for console output. In units of steps (0 = off). */

//Parameters controlling fDMRG
fdmrg::on                                 = false                             /*!< Turns fDMRG simulation on/off. */
fdmrg::max_iters                          = 10                                /*!< Max number of iterations. One iterations moves L steps. */
fdmrg::min_iters                          = 4                                 /*!< Min number of iterations. One iterations moves L steps. */
fdmrg::chi_lim_max                        = 32                                /*!< Bond dimension of the current position (maximum number of singular values to keep in SVD). */
fdmrg::chi_lim_grow                       = false                             /*!< Whether to increase chi slowly up to chi_max or go up to chi_max directly. */
fdmrg::chi_lim_init                       = 16                                /*!< Initial chi limit. Only used when chi_grow == true. */
fdmrg::print_freq                         = 1                                 /*!< Print frequency for console output. In units of iterations. (0 = off).*/
fdmrg::store_wavefn                       = false                             /*!< Whether to store the wavefunction. Runs out of memory quick, recommended is false for max_length > 14 */

//Parameters controlling fLBIT
flbit::on                                 = true                              /*!< Turns fLBIT simulation on/off. */
flbit::max_iters                          = 500                               /*!< Max number of iterations. One iterations moves L steps. */
flbit::min_iters                          = 50                                /*!< Min number of iterations. One iterations moves L steps. */
flbit::chi_lim_max                        = 256                               /*!< Bond dimension of the current position (maximum number of singular values to keep in SVD). */
flbit::chi_lim_grow                       = false                             /*!< Whether to increase chi slowly up to chi_max or go up to chi_max directly. */
flbit::chi_lim_init                       = 16                                /*!< Initial chi limit. Only used when chi_grow == true. */
flbit::num_layer                          = 6                                 /*!< Number of unitary 2-site layers which transform lbit <-> real spaces */
flbit::time_start_real                    = 1e-1                              /*!< Starting time point (real) */
flbit::time_start_imag                    = 0                                 /*!< Starting time point (imag) */
flbit::time_final_real                    = 1e6                               /*!< Finishing time point (real) */
flbit::time_final_imag                    = 0                                 /*!< Finishing time point (imag) */
flbit::time_num_steps                     = 100                               /*!< Number of steps from start to finish */
flbit::print_freq                         = 1                                 /*!< Print frequency for console output. In units of iterations. (0 = off).*/
flbit::store_wavefn                       = false                             /*!< Whether to store the wavefunction. Runs out of memory quick, recommended is false for max_length > 14 */

//Parameters controlling xDMRG
xdmrg::on                                 = false                             /*!< Turns xDMRG simulation on/off. */
xdmrg::max_iters                          = 200                               /*!< Max number of iterations. One iterations moves L steps. */
xdmrg::min_iters                          = 4                                 /*!< Min number of iterations. One iterations moves L steps. */
xdmrg::olap_iters                         = 0                                 /*!< Number of initial iterations selecting the candidate state with best overlap to the current state */
xdmrg::vsub_iters                         = 5                                 /*!< Number of iterations using the subspace optimization for variance, after overlap iterations */
xdmrg::chi_lim_max                        = 512                               /*!< Bond dimension of the current position (maximum number of singular values to keep in SVD). */<commit_msg>Try profiling svd on kraken<commit_after>
//Common parameters for the model Hamiltonian
model::model_type                         = lbit                             /*!< Choice of model: {ising_tf_rf,ising_sdual,lbit} */
model::model_size                         = 32                               /*!< Number of sites on the chain. Only relevant for finite algorithms: fDMRG and xDMRG */


//Console settings
console::verbosity                        = 2                                 /*!< Level of verbosity desired [0-6]. Level 0 prints everything, 6 nothing. Level 2 or 3 is recommended for normal use */
console::timestamp                        = true                              /*!< (NOT IMPLEMENTED) Whether to put a timestamp on console outputs */

// Parameters for Multithreading
threading::stl_threads                    = 1                                 /*!< Number of threads for openmp threads used in blas/lapack and Eigen. num_threads <= 0 will try to use as many as possible */
threading::omp_threads                    = 4                                 /*!< Number of threads for c++11 threading. Used in Eigen::Tensor. stl_threads <= 0 will try to use as many as possible */


//Parameters to control profiling.
profiling::on                             = true                              /*!< If true, turns on profiling and timings will be shown on console. */
profiling::extra                          = true                              /*!< Prints more profiling */
profiling::precision                      = 5                                 /*!< Sets precision (number of decimals) of time output. */


// Input parameters (note that CLI parameters overrwide these)
input::seed                               = 1                                 /*!< Main seed for the random number generator. */
input::bitfield                           = -1                                /*!< Number whose bitfield represents the initial product state in the basis given by initial_parity_sector. Only positive state numbers are used */


//Parameters for saving data to hdf5
output::output_filepath                   = ../output/mbl.h5                  /*!< Path of the output HDF5 file relative to the execution point  */
output::save_profiling                    = true                              /*!< Whether to save profiling information to file. (only enabled on storage level NORMAL and FULL.) */
output::savepoint_keep_newest_only        = true                              /*!< If true, a savepoint will overwrite previous savepoints on file. Otherwise, all iterations are kept (dramaticallay increases file size) */
output::savepoint_frequency               = 50                                /*!< How often, in units of iterations, to make a savepoint. 0 disables savepoints after iterations (chi-update savepoints can still happen) */
output::checkpoint_keep_newest_only       = true                              /*!< If true, a checkpoint will overwrite previous checkpoint on file. Otherwise, all iterations are kept (dramaticallay increases file size) */
output::checkpoint_keep_chi_updates       = false                             /*!< If true, a checkpoint is written to file before the bond dimension is updated */
output::checkpoint_frequency              = 1                                 /*!< How often, in units of iterations, to make a checkpoint. 0 disables checkpoints but chi-update checkpoints can still happen */
output::use_temp_dir                      = true                              /*!< If true uses a temporary directory for writes in the local drive (usually /tmp) and copies the results afterwards */
output::copy_from_temp_freq               = 25                                /*!< How often, in units of iterations, to copy the hdf5 file in tmp dir to target destination */
output::temp_dir                          = /tmp                              /*!< Local temp directory on the local system. If it does not exist we default to /scratch/local or /tmp instead (or whatever is the default) */
output::compression_level                 = 4                                 /*!< Attempt to use this compression level with HDF5. Choose between [0-9] (0 = off, 9 = max compression) */
output::file_collision_policy             = RESUME                            /*!< What to do when a prior output file is found. Choose between RESUME, BACKUP, RENAME, REPLACE */
output::file_resume_policy                = FAST                              /*!< Depends on dataset [common/finished_all=bool] FULL: Ignore bool -> Scan .cfg to add missing items. FAST: exit if true. */



// Storage Levels.
// NOTE 1: A simulation can only be resumed from FULL storage.
// NOTE 2: storage_level_model == NORMAL is enough to recreate MPOs when resuming, since they can be reconstructed from the Hamiltonian parameter table
//      NONE:   no data is saved at all
//      LIGHT:  Mainly mid-chain data (energy/variance/polarization, schmidt values, entanglement entropy, lambda matrix, truncation error) , simulation status, and profiling (if save_profiling == true)
//      NORMAL: Same as LIGHT + whole-chain measurements like entanglement entropies, truncation errors and schmidt values (lambda-matrices), and model Hamiltonian parameters
//      FULL:   Same as NORMAL + MPS (Gamma + Lambda matrices) + MPO at each site.
output::storage_level_model               = NORMAL                           /*!< Storage level for the model realization. LIGHT stores nothing. NORMAL stores the Hamiltonian parameter table, and FULL also the MPOs */
output::storage_level_savepoint           = FULL                             /*!< Storage level for savepoints, which are snapshots used for resume */
output::storage_level_checkpoint          = LIGHT                            /*!< Storage level for checkpoints, which are mid-simulation measurements (can also be used for resume if FULL) */
output::storage_level_good_state          = NORMAL                           /*!< Storage level for final results written when a simulation terminates successfully */
output::storage_level_fail_state          = NORMAL                           /*!< Storage level for final results written when a simulation terminates unsuccessfully */
output::storage_level_proj_state          = NORMAL                           /*!< Storage level for the parity projected states, a projected version of the state written when a simulation terminates */
output::storage_level_init_state          = NORMAL                           /*!< Storage level for the initial states (for instance when launching a simulation or starting a new state) */
output::storage_level_emin_state          = NORMAL                           /*!< Storage level for the minimum energy state (ground state) */
output::storage_level_emax_state          = NORMAL                           /*!< Storage level for the maximum energy state */



// Options for strategy that affect convergence and targeted state
strategy::compress_mpo_squared            = false                             /*!< Use SVD to compress the squared mpo bond dimension (Only for finite systems) */
strategy::chi_quench_when_stuck           = false                             /*!< Reduce chi for a few iterations when stuck and increasing bond dimension would not help */
strategy::perturb_when_stuck              = false                             /*!< Perturb MPO parameters to get unstuck from local minima */
strategy::damping_when_stuck              = false                             /*!< Dampen MPO parameters by reducing disorder, to get unstuck from local minima */
strategy::discard_schmidt_when_stuck      = false                             /*!< Try discarding smallest schmidt values when stuck */
strategy::project_trial_when_stuck        = false                             /*!< Project to target parity sector at the end of an iteration when stuck. */
strategy::project_on_every_iter           = false                             /*!< Project to target parity sector at the end of every iteration. This implies doing it when stuck also. */
strategy::project_on_chi_update           = false                             /*!< Project to target parity sector when bond dimension is increased (only works if chi_grow == true). */
strategy::project_initial_state           = false                             /*!< Project to target parity sector when initializing a state. */
strategy::randomize_on_chi_update         = false                             /*!< Randomize MPS by flipping random spins when growing chi */
strategy::randomize_early                 = false                             /*!< Randomize MPS by flipping random spins before fully converging the first attempt (because the initial product state guess is biased to low entanglement) */
strategy::use_eigenspinors                = true                              /*!< Use random pauli-matrix eigenvectors when initializing each mps site along x,y or z  */
strategy::max_resets                      = 1                                 /*!< Maximum number of resets to initial state. One must be allowed for initialization*/
strategy::multisite_max_sites             = 6                                 /*!< Maximum number of sites in multi-site dmrg. Too many sites (>12 or so) makes the contractions slow. */
strategy::multisite_move                  = MAX                               /*!< How many sites to move after a multi-site dmrg step, choose between {ONE, MID, MAX} */
strategy::target_sector                   = +z                                /*!< Find an eigenstate in this parity sector. Choose between {x,+x,-x, y, +y,-y, z,+z,-z, randomAxis,random,none}  */
strategy::initial_type                    = REAL                              /*!< Initial state can be REAL/CPLX */
strategy::initial_state                   = PRODUCT_STATE_NEEL                /*!< Initial configuration for the spin chain (only for finite systems)  */
strategy::secondary_states                = PRODUCT_STATE_NEEL                /*!< Spin configuration for subsequent states (only for finite systems)  */



//Parmaters that control MPS, eigensolver and SVD precision
precision::eig_max_iter                   = 2000                              /*!< Maximum number of steps for eigenvalue solver. */
precision::eig_threshold                  = 1e-12                             /*!< Minimum threshold for halting eigenvalue solver. */
precision::eig_max_ncv                    = 16                                /*!< Parameter controlling the column space? of the Lanczos solver. 16 is close to optimum when chi = 16. Coincidence? */
precision::svd_threshold                  = 1e-8                              /*!< Minimum threshold value for keeping singular values. */
precision::svd_switchsize                 = 16                                /*!< Linear size of a matrix, below which BDCSVD will use slower but more precise JacobiSVD instead (default is 16) */
precision::variance_convergence_threshold = 1e-12                             /*!< Variance convergence threshold. The MPS state is considered good enough when its variance reaches below this value */
precision::variance_slope_threshold       = 5                                 /*!< Variance saturation slope threshold [0-100%]. The variance has saturated when its (absolute) slope reaches below this value. 2 would mean the data saturates when it changes less than 2% per iteration */
precision::entropy_slope_threshold        = 1                                 /*!< Entanglement Entropy saturation slope threshold [0-100%]. The entanglement entropy has saturated when its (absolute) slope reaches below this value. 2 would mean the data saturates when it changes less than 2% per iteration */
precision::subspace_error_factor          = 1                                 /*!< Minimum quality of subspace for going ahead in variance optimization. If the quality is too bad, direct optimization is done instead */
precision::max_subspace_error             = 1e-12                             /*!< The maximum subspace error. Never do subspace variance optimization with subspace error greater than this. */
precision::min_subspace_error             = 1e-12                             /*!< The minimum subspace error. Always do subspace variance optimization with subspace error less than this  */
precision::max_size_full_diag             = 2048                              /*!< Maximum linear size allowed for full diagonalization of the local hamiltonian matrix. Use 0 to allow any value */
precision::max_size_part_diag             = 4096                              /*!< Maximum linear size allowed for partial diagonalization of the local hamiltonian matrix. Use 0 to allow any value */
precision::max_size_direct                = 2097152                           /*!< Maximum linear size for direct multisite dmrg. If the linear size is larger than this, the algorithm prefers 2-site dmrg. */
precision::max_norm_error                 = 1e-10                             /*!< Maximum norm deviation from unity during integrity checks */
precision::use_reduced_energy             = true                              /*!< Whether to subtract E/L from each mpo to avoid catastrophic cancellation when computing the variance */



//Parameters for the transvese-field next-nearest neighbor Ising model with a random field
model::ising_tf_rf::J1                    = 1.0                               /*!< Ferromagnetic coupling for nearest neighbors.*/
model::ising_tf_rf::J2                    = 0.0                               /*!< Ferromagnetic coupling for next-nearest neighbors.*/
model::ising_tf_rf::h_tran                = 1.0                               /*!< Transverse field strength */
model::ising_tf_rf::h_mean                = 0.0                               /*!< Random field mean of distribution */
model::ising_tf_rf::h_stdv                = 0.0                               /*!< Random field standard deviation. In distribution this is N(h_mean,h_stdv) or U(h_mean-h_stdv,h_mean+h_stdv) */
model::ising_tf_rf::spin_dim              = 2                                 /*!< Spin dimension */
model::ising_tf_rf::distribution          = uniform                           /*!< Random distribution for couplings and fields */


//Parameters for the selfdual transverse-field random-field next-nearest neighbor Ising model
model::ising_sdual::J_stdv                = 1.0                               /*!< Standard deviation for the log-normal distribution defining ferromagnetic coupling */
model::ising_sdual::h_stdv                = 1.0                               /*!< Standard deviation for the log-normal distribution defining transverse magnetic field */
model::ising_sdual::lambda                = 0.0                               /*!< Lambda parameter */
model::ising_sdual::delta                 = 0.0                               /*!< Delta defined as log(J_mean) - log(h_mean). We get J_mean and h_mean by fixing max(J_mean,h_mean) = 1 */
model::ising_sdual::spin_dim              = 2                                 /*!< Spin dimension */
model::ising_sdual::parity_sep            = false                             /*!< Separation of +-X parity sectors */
model::ising_sdual::distribution          = lognormal                         /*!< Random distribution for couplings and fields */

//Parameters for the l-bit hamiltonian
model::lbit::J1_mean                      = 0.00                              /*!< Constant offset for on-site */
model::lbit::J2_mean                      = 0.25                              /*!< Constant offset for two-body interaction */
model::lbit::J3_mean                      = 0.00                              /*!< Constant offset for three-body interaction */
model::lbit::J1_wdth                      = 1.00                              /*!< Width of the uniform box distribution U(-w1,w1) for on-site interactions */
model::lbit::J2_wdth                      = 0.50                              /*!< Width of the uniform box distribution U(-w2,w2) for two-body interaction */
model::lbit::J3_wdth                      = 0.25                              /*!< Width of the uniform box distribution U(-w3,w3) for three-body interaction */
model::lbit::fmix                         = 0.20                              /*!< Mixing factor for unitary transformation to real-space */
model::lbit::spin_dim                     = 2                                 /*!< Spin dimension */
model::lbit::distribution                 = uniform                           /*!< Random distribution for interaction strengths */


//Parameters controlling iDMRG
idmrg::on                                 = false                             /*!< Turns iDMRG simulation on/off. */
idmrg::max_iters                          = 500                               /*!< Number of iterations. */
idmrg::chi_lim_max                        = 64                                /*!< Bond dimension of the current position (maximum number of singular values to keep in SVD). */
idmrg::chi_lim_grow                       = true                              /*!< Whether to increase chi slowly up to chi_max or go up to chi_max directly. */
idmrg::chi_lim_init                       = 8                                 /*!< Initial chi limit. Only used when chi_grow == true. */
idmrg::print_freq                         = 1                                 /*!< Print frequency for console output. In units of steps (0 = off). */

//Parameters controlling fDMRG
fdmrg::on                                 = false                             /*!< Turns fDMRG simulation on/off. */
fdmrg::max_iters                          = 10                                /*!< Max number of iterations. One iterations moves L steps. */
fdmrg::min_iters                          = 4                                 /*!< Min number of iterations. One iterations moves L steps. */
fdmrg::chi_lim_max                        = 32                                /*!< Bond dimension of the current position (maximum number of singular values to keep in SVD). */
fdmrg::chi_lim_grow                       = false                             /*!< Whether to increase chi slowly up to chi_max or go up to chi_max directly. */
fdmrg::chi_lim_init                       = 16                                /*!< Initial chi limit. Only used when chi_grow == true. */
fdmrg::print_freq                         = 1                                 /*!< Print frequency for console output. In units of iterations. (0 = off).*/
fdmrg::store_wavefn                       = false                             /*!< Whether to store the wavefunction. Runs out of memory quick, recommended is false for max_length > 14 */

//Parameters controlling fLBIT
flbit::on                                 = true                              /*!< Turns fLBIT simulation on/off. */
flbit::max_iters                          = 500                               /*!< Max number of iterations. One iterations moves L steps. */
flbit::min_iters                          = 50                                /*!< Min number of iterations. One iterations moves L steps. */
flbit::chi_lim_max                        = 128                               /*!< Bond dimension of the current position (maximum number of singular values to keep in SVD). */
flbit::chi_lim_grow                       = false                             /*!< Whether to increase chi slowly up to chi_max or go up to chi_max directly. */
flbit::chi_lim_init                       = 16                                /*!< Initial chi limit. Only used when chi_grow == true. */
flbit::num_layer                          = 6                                 /*!< Number of unitary 2-site layers which transform lbit <-> real spaces */
flbit::time_start_real                    = 1e-1                              /*!< Starting time point (real) */
flbit::time_start_imag                    = 0                                 /*!< Starting time point (imag) */
flbit::time_final_real                    = 1e6                               /*!< Finishing time point (real) */
flbit::time_final_imag                    = 0                                 /*!< Finishing time point (imag) */
flbit::time_num_steps                     = 100                               /*!< Number of steps from start to finish */
flbit::print_freq                         = 1                                 /*!< Print frequency for console output. In units of iterations. (0 = off).*/
flbit::store_wavefn                       = false                             /*!< Whether to store the wavefunction. Runs out of memory quick, recommended is false for max_length > 14 */

//Parameters controlling xDMRG
xdmrg::on                                 = false                             /*!< Turns xDMRG simulation on/off. */
xdmrg::max_iters                          = 200                               /*!< Max number of iterations. One iterations moves L steps. */
xdmrg::min_iters                          = 4                                 /*!< Min number of iterations. One iterations moves L steps. */
xdmrg::olap_iters                         = 0                                 /*!< Number of initial iterations selecting the candidate state with best overlap to the current state */
xdmrg::vsub_iters                         = 5                                 /*!< Number of iterations using the subspace optimization for variance, after overlap iterations */
xdmrg::chi_lim_max                        = 512                               /*!< Bond dimension of the current position (maximum number of singular values to keep in SVD). */
{'fraction_non_alphanumeric': 0.07471409254463365, 'fraction_numerical': 0.009854926317236954, 'mean_word_length': 1.5220507485116468, 'pattern_counts': {'":': 0, '<': 259, '<?xml version=': 0, '>': 13, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 283, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2602998', 'n_tokens_mistral': 10229, 'n_tokens_neox': 9342, 'n_words': 3777}