Simulation¶
full name: tenpy.simulations.simulation.Simulation
parent module:
tenpy.simulations.simulation
type: class
Inheritance Diagram

Methods
|
|
Perform a last set of measurements. |
|
Determine the output filenames. |
|
|
Re-initialize a given simulation class from checkpoint results. |
|
Extract the name used for backups of output_filename. |
|
Get psi for measurements. |
Read out the output_filename from the options. |
|
Try to save version info which is necessary to allow reproducability. |
|
Coarse-grain the model and state for the algorithm. |
|
Split sites of psi that were grouped in |
|
|
Initialize the algorithm. |
Initialize the |
|
Initialize and prepare measurements. |
|
Initialize a |
|
Initialize a tensor network |
|
Perform measurements and merge the results into |
|
Emits the |
|
Bring the results into a state suitable for saving. |
|
Resume a simulation that was initialized from a checkpoint. |
|
Resume running the algorithm. |
|
Run the whole simulation. |
|
Run the algorithm. |
|
|
Save the intermediate results at the checkpoint of an algorithm. |
|
Save the |
Wall time evolved since initialization of the simulation class. |
Class Attributes and Properties
name of the default algorithm engine class |
|
tuples as for |
|
class attribute. |
|
|
- class tenpy.simulations.simulation.Simulation(options, *, setup_logging=True, resume_data=None)[source]¶
Bases:
object
Base class for simulations.
The prefered way to run simulations is in a with statement, which allows us to redirect error messages to the log files, timely warn about unused parameters and to properly close any open files. In other words, use the simulation class like this:
with Simulation(options, ...) as sim: results = sim.run()
The wrappers
run_simulation()
andrun_seq_simulations()
do that.- Parameters
options (dict-like) – The simulation parameters as outlined below. Ideally, these options should be enough to fully specify all parameters of a simulation to ensure reproducibility.
setup_logging (bool) – Whether to call
setup_logging()
at the beginning of initialization.resume_data (None | dict) – Ignored if None. If a dictionary, it should contain the data for resuming the simulation,
results['resume_data']
(seeresults
). Note that the dict is cleared after readout to allow freeing memory.
Options
- config Simulation¶
option summary algorithm_class in Simulation.init_algorithm
Class or name of a subclass of :class:`~tenpy.algorithms.algorithm.Algorith [...]
algorithm_params in Simulation.init_algorithm
Dictionary with parameters for the algortihm; see the decoumentation of the [...]
cache_params in GroundStateSearch.init_cache
Dictionary with parameters for the cache, see [...]
cache_threshold_chi in GroundStateSearch.init_cache
If the `algorithm_params.trunc_params.chi_max` in :attr:`options` is smalle [...]
canonicalize_before_measurement in GroundStateSearch.init_measurements
If True, call `psi.canonical_form()` on the state used for measurement.
connect_algorithm_checkpoint in Simulation.init_algorithm
Functions to connect to the :attr:`~tenpy.algorithms.Algorith.checkpoint` e [...]
connect_measurements in GroundStateSearch.init_measurements
Functions to connect to the :attr:`measurement_event`. [...]
If not None (default), switch to that directory at the beginning of the sim [...]
group_sites in GroundStateSearch.group_sites_for_algorithm
How many sites to group. 1 means no grouping.
group_to_NearestNeighborModel in GroundStateSearch.group_sites_for_algorithm
If True, convert the grouped model to a [...]
initial_state_builder_class in GroundStateSearch.init_state
Class or name of a subclass of :class:`~tenpy.networks.mps.InitialStateBuil [...]
initial_state_params in GroundStateSearch.init_state
Dictionary with parameters for building `psi`; see the decoumentation of th [...]
Log parameters; see :cfg:config:`log`.
measure_at_algorithm_checkpoints in GroundStateSearch.init_measurements
Defaults to False. If True, make measurements at each algorithm checkpoint. [...]
measure_initial in GroundStateSearch.init_measurements
Whether to perform a measurement on the initial state, i.e., before startin [...]
model_class in GroundStateSearch.init_model
Mandatory. Class or name of a subclass of :class:`~tenpy.models.model.Model`.
model_params in GroundStateSearch.init_model
Dictionary with parameters for the model; see the documentation of the [...]
output_filename in GroundStateSearch.get_output_filename
If ``None`` (default), no output is written to files. [...]
output_filename_params in GroundStateSearch.get_output_filename
Instead of specifying the `output_filename` directly, this dictionary descr [...]
overwrite_output in GroundStateSearch.fix_output_filenames
Only makes a difference if `skip_if_output_exists` is False and the file ex [...]
If not ``None``, initialize the (legacy) numpy random generator with the gi [...]
safe_write in GroundStateSearch.fix_output_filenames
If True (default), perform a "safe" overwrite of `output_filename` as descr [...]
save_every_x_seconds in GroundStateSearch.save_at_checkpoint
By default (``None``), this feature is disabled. [...]
save_psi in GroundStateSearch.init_state
Whether the final :attr:`psi` should be included into the output :attr:`res [...]
Parameters for running simulations sequentially, see :cfg:config:`sequentia [...]
skip_if_output_exists in GroundStateSearch.fix_output_filenames
If True, raise :class:`Skip` if the output file already exists.
use_default_measurements in GroundStateSearch.init_measurements
Each Simulation class defines a list of :attr:`default_measurements` in the [...]
- option directory: str¶
If not None (default), switch to that directory at the beginning of the simulation.
- option overwrite_output: bool¶
Whether an exisiting file may be overwritten. Otherwise, if the file already exists we try to replace
filename.ext
withfilename_01.ext
(and further increasing numbers).
- option random_seed: int | None¶
If not
None
, initialize the (legacy) numpy random generator with the given seed. Note that models have their ownrng
with a separate (default)CouplingMPOModel.random_seed
in the model_params. If this random_seed is set, we callmodel_params('random_seed', random_seed + 123456)
- option sequential: dict¶
Parameters for running simulations sequentially, see
sequential
. Ignored by the simulation itself, but used byrun_seq_simulations()
andresume_from_checkpoint()
to run a whole sequence of simulations passing on the state (and possible more).
- psi¶
The tensor network state updated by the algorithm.
- engine¶
The engine of the algorithm.
- results¶
Collection of all the results to be saved in the end. In a standard simulation, it will have the following entries.
- simulation_parameters: nested dict
The simulation parameters passed as options.
- version_infodict
Information of the used library/code versions and simulation class. See
get_version_info()
.- finished_runbool
Usefull to check whether the output file finished or was generated at a checkpoint. This flag is set to True only right at the end of
run()
(orresume_run()
) before saving.- measurementsdict
Data of all the performed measurements.
- psi :
The final tensor network state. Only included if
Simulation.save_psi
is True (default).- resume_datadict
Additional data for resuming the algorithm run. Not part of self.results, but only added in
prepare_results_for_save()
with the most up-to-date resume_data fromget_resume_data()
. Only included ifSimultion.save_resume_data
is True. Note that this contains anoter (reference or even copy of) psi.
- Type
- measurement_event¶
An event that gets emitted each time when measurements should be performed. The callback functions should take
psi
, the simulation class itself, and a dictionary results as arguments. They should directly write the results into that dictionary.- Type
- _backup_filename¶
When writing a file a second time, instead of simply overwriting it, move it to there. In that way, we still have a non-corrupt version if something fails during saving.
- Type
- _init_walltime¶
Walltime at initialization of the simulation class. Used as reference point in
walltime()
.- Type
- _last_save¶
Time of the last call to
save_results()
, initialized to_init_walltime
.- Type
- loaded_from_checkpoint¶
True when the simulation is loaded with
from_saved_checkpoint()
.- Type
- grouped¶
By how many sites we grouped in
group_sites_for_algorithm()
.- Type
- model_ungrouped¶
Only set if grouped > 1. In that case,
model
is the modified/grouped model, and model_ungrouped is the original ungrouped model.
- default_algorithm = 'TwoSiteDMRGEngine'¶
name of the default algorithm engine class
- default_measurements = [('tenpy.simulations.measurement', 'm_measurement_index', {}, 1), ('tenpy.simulations.measurement', 'm_bond_dimension'), ('tenpy.simulations.measurement', 'm_energy_MPO'), ('tenpy.simulations.measurement', 'm_entropy')]¶
tuples as for
Simulation.connect_measurements
that get added if theSimulation.use_default_measurements
is True.
- logger = <Logger tenpy.simulations.simulation.Simulation (WARNING)>¶
class attribute.
- Type
logger
- Type
An instance of a logger; see Logging and terminal output. NB
- run()[source]¶
Run the whole simulation.
- Returns
results – The
results
as returned byprepare_results_for_save()
.- Return type
- classmethod from_saved_checkpoint(filename=None, checkpoint_results=None, **kwargs)[source]¶
Re-initialize a given simulation class from checkpoint results.
You should probably call
resume_run()
after sucessfull initialization.Instead of calling this directly, consider using
resume_from_checkpoint()
.- Parameters
filename (None | str) – The filename of the checkpoint to be loaded. You can either specify the filename or the checkpoint_results.
checkpoint_results (None | dict) – Alternatively to filename the results of the simulation so far, i.e. directly the data dicitonary saved at a simulation checkpoint.
**kwargs – Further keyword arguments given to the Simulation.__init__.
- resume_run()[source]¶
Resume a simulation that was initialized from a checkpoint.
- Returns
results – The
results
as returned byprepare_results_for_save()
.- Return type
- init_cache()[source]¶
Initialize the
cache
from the options.This method is only called automatically when the simulation is used in a
with ...
statement. This is the case if you userun_simulation()
, etc.Options
- option Simulation.cache_threshold_chi: int¶
If the algorithm_params.trunc_params.chi_max in
options
is smaller than this threshold, do not initialize a (non-trivial) cache.
- option Simulation.cache_params: dict¶
Dictionary with parameters for the cache, see
open()
.
- init_model()[source]¶
Initialize a
model
from the model parameters.Skips initialization if
model
is already set.Options
- option Simulation.model_class: str | class¶
Mandatory. Class or name of a subclass of
Model
.
- option Simulation.model_params: dict¶
Dictionary with parameters for the model; see the documentation of the corresponding model_class.
- init_state()[source]¶
Initialize a tensor network
psi
.Skips initialization if
psi
is already set.Options
- option Simulation.initial_state_builder_class: str | class¶
Class or name of a subclass of
InitialStateBuilder
. Used to initialize psi according to the initial_state_params.
- option Simulation.initial_state_params: dict¶
Dictionary with parameters for building psi; see the decoumentation of the initial_state_builder_class, e.g.
InitialStateBuilder
.
- option Simulation.save_psi: bool¶
Whether the final
psi
should be included into the outputresults
.
- group_sites_for_algorithm()[source]¶
Coarse-grain the model and state for the algorithm.
Options
- option Simulation.group_sites: int¶
How many sites to group. 1 means no grouping.
- option Simulation.group_to_NearestNeighborModel: bool¶
If True, convert the grouped model to a
NearestNeighborModel
. Use this if you want to run TEBD with a model that was originally next-nearest neighbor.
- group_split()[source]¶
Split sites of psi that were grouped in
group_sites_for_algorithm()
.
- init_algorithm(**kwargs)[source]¶
Initialize the algorithm.
If
results
has ‘resume_data’, it is read out, used for initialization and removed from the results.- Parameters
**kwargs – Extra keyword arguments passed on to the Algorithm.__init__(), for example the resume_data when calling resume_run.
Options
- option Simulation.algorithm_class: str | class¶
Class or name of a subclass of
Algorithm
. The engine of the algorithm to be run.
- option Simulation.algorithm_params: dict¶
Dictionary with parameters for the algortihm; see the decoumentation of the algorithm_class.
- option Simulation.connect_algorithm_checkpoint: list of tuple¶
Functions to connect to the
checkpoint
event of the algorithm. Each tuple can be of length 2 to 4, with entries(module, function, kwargs, priority)
, the last two optionally. The mandatory module and function specify a callback measurement function. kwargs can specify extra keyword-arguments for the function, priority allows to tune the order in which the measurement functions get called. Seeconnect_by_name()
for more details.
- init_measurements()[source]¶
Initialize and prepare measurements.
Options
- option Simulation.connect_measurements: list of tuple¶
Functions to connect to the
measurement_event
. Each tuple can be of length 2 to 4, with entries(module, function, kwargs, priority)
, the last two optionally. The mandatory module and function specify a callback measurement function. kwargs can specify extra keyword-arguments for the function, priority allows to tune the order in which the measurement functions get called. Seeconnect_by_name()
for more details.
- option Simulation.use_default_measurements: bool¶
Each Simulation class defines a list of
default_measurements
in the same format asSimulation.connect_measurements
. This flag allows to explicitly disable them.
- option Simulation.measure_initial: bool¶
Whether to perform a measurement on the initial state, i.e., before starting the algorithm run.
- option Simulation.measure_at_algorithm_checkpoints: bool¶
Defaults to False. If True, make measurements at each algorithm checkpoint. This can be useful to study e.g. the DMRG convergence with the number of sweeps. Note that (depending on the algorithm) psi might not be in canonical form during the algorithm run. In that case, you might need to also enable the canonicalize_before_measurement option to get correct e.g. correct long-range correlation functions. (On the other hand, local onsite expectation values are likely fine without the explicit canonical_form() call.)
- option Simulation.canonicalize_before_measurement: bool¶
If True, call psi.canonical_form() on the state used for measurement.
- make_measurements()[source]¶
Perform measurements and merge the results into
self.results['measurements']
.
- perform_measurements()[source]¶
Emits the
measurement_event
to call measurement functions and collect results.- Returns
results – The results from calling the measurement functions.
- Return type
- get_measurement_psi_model(psi, model)[source]¶
Get psi for measurements.
Sometimes, the psi we want to use for measurements is different from the one the algorithm actually acts on. Here, we split sites, if they were grouped in
group_sites_for_algorithm()
.- Parameters
psi – Tensor network; initially just
self.psi
. The method should make a copy before modification.model – Model matching psi (in terms of indexing, MPS order, grouped sites, …) Initially just
self.model
.
- Returns
psi – The psi suitable as argument for generic measurement functions.
model – Model matching psi (in terms of indexing, MPS order, grouped sites, …)
- get_output_filename()[source]¶
Read out the output_filename from the options.
You can easily overwrite this method in subclasses to customize the outputfilename depending on the options passed to the simulations.
Options
- option Simulation.output_filename: path_like | None¶
If
None
(default), no output is written to files. If a string, this filename is used for output (up to modifications byfix_output_filenames()
to avoid overwriting previous results).
- option Simulation.output_filename_params: dict¶
Instead of specifying the output_filename directly, this dictionary describes the parameters that should be included into it. Entries of the dictionary are keyword arguments to
output_filename_from_dict()
with the simulation parameters (Simulation
, or equivalentlyoptions
) as options.
- Returns
output_filename – Filename for output; None disables any writing to files. Relative to
Simulation.directory
, if specified. The file ending determines the output format.- Return type
str | None
- fix_output_filenames()[source]¶
Determine the output filenames.
This function determines the
output_filename
and writes a one-line text into that file to indicate that we’re running a simulation generating it. Further,_backup_filename
is determined.Options
- option Simulation.skip_if_output_exists: bool¶
If True, raise
Skip
if the output file already exists.
- option Simulation.overwrite_output: bool¶
Only makes a difference if skip_if_output_exists is False and the file exists. In that case, with overwrite_output, just save everything under that name again, or with overwrite_output`=False, replace ``filename.ext` with
filename_01.ext
(and further increasing numbers) until we get a filename that doesn’t exist yet.
- option Simulation.safe_write: bool¶
If True (default), perform a “safe” overwrite of output_filename as described in
save_results()
.
- get_backup_filename(output_filename)[source]¶
Extract the name used for backups of output_filename.
- Parameters
output_filename (pathlib.Path) – The filename where data is saved.
- Returns
backup_filename – The filename where to keep a backup while writing files to avoid.
- Return type
- save_results(results=None)[source]¶
Save the
results
to an output file.Performs a “safe” overwrite of
output_filename
by first moving the old file to_backup_filename
, then writing the new file, and finally removing the backup.- Parameters
results (dict | None) – The results to be safed. If not specified, call
prepare_results_for_save()
to allow last-minute adjustments to the savedresults
.
- prepare_results_for_save()[source]¶
Bring the results into a state suitable for saving.
For example, this can be used to convert lists to numpy arrays, to add more meta-data, or to clean up unnecessarily large entries.
Options
- save_at_checkpoint(alg_engine)[source]¶
Save the intermediate results at the checkpoint of an algorithm.
- Parameters
alg_engine (
Algorithm
) – The engine of the algorithm. Not used in this function, mostly there for compatibility with thetenpy.algorithms.Algorithm.checkpoint
event.
Options
- option Simulation.save_every_x_seconds: float | None¶
By default (
None
), this feature is disabled. If given, save theresults
obtained so far at eachtenpy.algorithm.Algorithm.checkpoint
when at least save_every_x_seconds seconds evolved since the last save (or since starting the algorithm). To avoid unnecessary, slow disk input/output, the value will be increased if saving takes longer than 10% of save_every_x_seconds. Use0.
to force saving at each checkpoint.
- walltime()[source]¶
Wall time evolved since initialization of the simulation class.
Utility measurement method. To measure it, add the following entry to the
Simulation.connect_measurements
option:- - simulation_method - wrap walltime
- Returns
seconds – Elapsed (wall clock) time in seconds since the initialization of the simulation.
- Return type